Разработка алгоритмов асимметричного шифрования является величайшим и, возможно, единственным действительно революционным достижением в истории криптографии.
Алгоритмы асимметричного шифрования, называемые также алгоритмами с открытым ключом, принципиально отличаются от алгоритмов симметричного шифрования. Шифрование с открытым ключом является асимметричным, поскольку использует два различных ключа для шифрования и расшифрования, в отличие от симметричного шифрования, в котором для шифрования и расшифрования используется один и тот же ключ. Алгоритмы с открытым ключом гораздо больше основаны на свойствах математических функций, чем алгоритмы симметричного шифрования, использующие в основном только операции подстановки и перемещения. Наличие двух ключей имеет важное применение в таких областях, как аутентификация, распределение ключа и конфиденциальность.
Алгоритмы с открытым ключом разрабатывались для того, чтобы решить две наиболее трудные задачи, возникшие при использовании симметричного шифрования.
Первой задачей является распределение ключа. При симметричном шифровании требуется, чтобы обе стороны уже имели общий ключ, который каким-то образом должен быть им заранее передан. Диффи, один из основоположников шифрования с открытым ключом, заметил, что это требование отрицает всю суть криптографии, основное назначение которой поддерживать секретность коммуникаций.
Второй задачей является необходимость создания таких механизмов, при использовании которых невозможно было бы подменить кого-либо из участников, т.е. нужен аналог подписи, которая используется в реальном мире. Такой аналог обычно называется цифровой или электронной подписью (англ. вариант – Digital Signature). При использовании коммуникаций для решения широкого круга задач, например в коммерческих и частных целях, электронные сообщения и документы должны иметь эквивалент подписи, содержащейся в бумажных документах. Необходимо создать метод, при использовании которого все участники будут убеждены, что электронное сообщение было послано конкретным участником. Это более сильное требование, чем аутентификация с использованием пароля или общего секрета.
Диффи и Хеллман достигли значительных результатов, предложив способ решения обеих задач, который радикально отличается от всех предыдущих подходов к шифрованию.
Сначала рассмотрим общие черты алгоритмов шифрования с открытым ключом и требования к этим алгоритмам. Определим требования, которым должен соответствовать алгоритм, использующий один ключ для шифрования, другой ключ - для расшифрования, и при этом вычислительно невозможно определить ключ расшифрования, зная только алгоритм и ключ шифрования.
Кроме того, некоторые алгоритмы, например RSA, имеют следующее свойство: каждый из двух ключей может использоваться как для шифрования, так и для расшифрования.
Сначала рассмотрим алгоритмы, обладающие обеими характеристиками, а затем перейдем к алгоритмам открытого ключа, которые не обладают вторым свойством.
При описании симметричного шифрования и шифрования с открытым ключом будем использовать следующую терминологию. Ключ, используемый в симметричном шифровании, будем называть секретным ключом. Два ключа, используемые при шифровании с открытым ключом, будем называть открытым ключом (Key Public – KU) и закрытым ключом (Key Private – KR). Закрытый ключ держится в секрете, но называть его будем закрытым ключом, а не секретным, чтобы избежать путаницы с ключом, используемым в симметричном шифровании. Закрытый ключ будем обозначать KR, открытый ключ - KU.
Будем предполагать, что все участники имеют доступ к открытым ключам друг друга, а закрытые ключи создаются локально каждым участником и, следовательно, распределяться не должны.
В любое время участник может изменить свой закрытый ключ и опубликовать составляющий пару открытый ключ, заменив им старый открытый ключ.
Диффи и Хеллман описывают требования, которым должен удовлетворять алгоритм шифрования с открытым ключом.
KU, закрытый ключ KR).М, создать соответствующее зашифрованное сообщение:
$$С = Е_{KU} [М]$$KU, определить закрытый ключ KR.KU и зашифрованное сообщение С, восстановить исходное сообщение М.
Можно добавить шестое требование, хотя оно не выполняется для всех алгоритмов с открытым ключом:
Это достаточно сильные требования, которые вводят понятие односторонней функции с люком. Односторонней функцией называется такая функция, у которой каждый аргумент имеет единственное обратное значение, при этом вычислить саму функцию легко, а вычислить обратную функцию трудно.
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 неизвестно
Мы видим, что разработка конкретного алгоритма с открытым ключом зависит от открытия соответствующей односторонней функции с люком.
Как и в случае симметричного шифрования, алгоритм шифрования с открытым ключом уязвим для лобовой атаки. Контрмера стандартная: использовать ключи большей длины.
Криптосистема с открытым ключом использует не инвертируемые математические функции. Сложность вычислений таких функций не является линейной от количества битов ключа, а возрастает быстрее, чем ключ. Таким образом, размер ключа должен быть достаточно большим, чтобы сделать лобовую атаку непрактичной, и достаточно маленьким для возможности практического шифрования. На практике размер ключа делают таким, чтобы лобовая атака была непрактичной, но в результате скорость шифрования оказывается достаточно медленной для использования алгоритма в общих целях. Поэтому шифрование с открытым ключом в настоящее время в основном ограничивается приложениями управления ключом и создания подписи, в которых требуется шифрование или подписывание небольшого блока данных.
Другая форма атаки состоит в том, чтобы найти способ вычисления закрытого ключа, зная открытый ключ. Невозможно математически доказать, что данная форма атаки исключена для конкретного алгоритма открытого ключа. Таким образом, любой алгоритм, включая широко используемый алгоритм RSA, является подозрительным.
Наконец, существует форма атаки, специфичная для способов использования систем с открытым ключом. Это атака вероятного сообщения. Предположим, например, что посылаемое сообщение состоит исключи-тельно из 56-битного ключа сессии для алгоритма симметричного шифро-вания. Противник может зашифровать все возможные ключи, используя открытый ключ получателя. В этом случае атака сводится к лобовой атаке на 56-битный симметричный ключ. Защита от подобной атаки состоит в добавлении определенного количества случайных битов в простые сообщения.
Основными способами использования алгоритмов с открытым ключом являются шифрование / расшифрование, создание и проверка подписи и обмен ключа.
Шифрование с открытым ключом состоит из следующих шагов:
(рис 4.1) . Схема шифрования с открытым ключом
В создает пару ключей KUb и KRb, которые могут использоваться для шифрования и расшифрования передаваемых сообщений.В передает пользователю A некоторым надежным способом свой ключ шифрования, т.е. открытый ключ KUb. Составляющий пару закрытый ключ KRb держится в секрете.А хочет послать конфиденциальное сообщение В, он шифрует сообщение, используя открытый ключ В KUb.В получает сообщение, он расшифровывает его, используя свой закрытый ключKRb. Никто другой не сможет расшифровать сообщение, так как этот закрытый ключ знает только В.В надежно хранит свой закрытый ключ, никто не сможет расшифровать передаваемые сообщения.Создание и проверка подписи состоит из следующих шагов:
(рис 4.2) Схема создания и проверки подписи
A создает пару ключей KRA и KUA, которые могут использоваться для создания и проверки подписи.A передает пользователю В некоторым надежным способом свой ключ проверки подписи, т.е. открытый ключ KUA. Составляющий пару закрытый ключ KRA держится в секрете.A хочет послать подписанное сообщение пользователю В, он создает подпись SignKRa[M] этого сообщения, используя свой закрытый ключ KRA.В получает подписанное сообщение, он проверяет подпись VerKUa[M], используя открытый ключ KUA пользователя A. Никто другой не может подписать сообщение, так как этот закрытый ключ знает только A.A надежно хранит свой закрытый ключ, его подписи достоверны. Кроме того, невозможно изменить сообщение, не имея доступа к закрытому ключу А; тем самым обеспечивается аутентификация отправителя и целостность передаваемых данных. Все алгоритмы создания и проверки подписи имеют большую вычислительную нагрузку, так как связаны с возведением в большие степени. Более эффективным способом является подписывание небольшого блока битов, который является функцией от сообщения. Такой блок, называемый аутентификатором, должен обладать таким свойством, что любое изменение сообщения с большой веро-ятностью приводит к изменению его аутентификатора. Этот аутентификатор подписывается закрытым ключом отправителя, т.е. создается цифровая подпись. Далее эта технология будет рассматриваться в деталях.Важно подчеркнуть, что описанный процесс создания подписи не обеспечивает конфиденциальность. Это означает, что сообщение, посланное таким способом, невозможно изменить, но можно подсмотреть. Это очевидно в том случае, если подпись основана на аутентификаторе, так как само сообщение передается в явном виде. Но даже если осуществляется подписывание всего сообщения, конфиденциальность не обеспечивается, так как любой может получить исходное сообщение, используя открытый ключ отправителя.
Аутентификация защищает двух участников, которые обмениваются сообщениями, от взаимодействия с некоторой третьей стороной. Однако аутентификация, выполняемая с использованием общего секрета (пароля), не защищает участников друг от друга, тогда как и между ними тоже могут возникать определенные формы споров.
Например, предположим, что A посылает B аутентифицированное сообщение, и аутентификация осуществляется на основе общего секрета. Рассмотрим возможные проблемы, которые могут при этом возникнуть:
B может подделать сообщение и утверждать, что оно пришло от А. B достаточно просто создать сообщение и присоединить аутентификационный код, используя ключ, который разделяют A и B.
A может отрицать, что он посылал сообщение B. Так как B может подделать сообщение, у него нет способа доказать, что A действительно посылал его.
В ситуации, когда обе стороны не доверяют друг другу, необходимо нечто большее, чем аутентификация на основе общего секрета. Возможным решением подобной проблемы является использование цифровой подписи. Цифровая подпись должна обладать следующими свойствами:
1. Должна быть возможность проверить автора, дату и время создания подписи.
2. Должна быть возможность аутентифицировать содержимое во время создания подписи.
3. Подпись должна быть проверяема третьей стороной для разрешения споров.
Таким образом, создание цифровой подписи включает сервис аутентификации отправителя.
На основании этих свойств можно сформулировать следующие требования к цифровой подписи:
Сильная хэш-функция, зашифрованная закрытым ключом отправителя, удовлетворяет перечисленным требованиям.
Обмен ключей: две стороны взаимодействуют для обмена ключом сессии, который в дальнейшем можно использовать в алгоритме симметричного шифрования.
Некоторые алгоритмы можно задействовать тремя способами, в то время как другие могут использоваться одним или двумя способами.
Перечислим наиболее популярные алгоритмы с открытым ключом и возможные способы их применения.
Таблица 4.1
Диффи и Хеллман определили новый подход к шифрованию, что вы-звало к жизни разработку алгоритмов шифрования, удовлетворяющих тре-бованиям систем с открытым ключом. Одним из первых результатов был алгоритм, разработанный в 1977 году Роном Ривестом, Ади Шамиром и Леном Адлеманом и опубликованный в 1978 году. С тех пор алгоритм Rivest-Shamir-Adleman (RSA) широко применяется практически во всех приложениях, использующих криптографию с открытым ключом.
Алгоритм основан на использовании того факта, что задача факторизации является трудной, т.е. легко перемножить два числа, в то время как не существует полиномиального алгоритма нахождения простых сомножителей большого числа.
Алгоритм RSA представляет собой блочный алгоритм шифрования, где зашифрованные и незашифрованные данные являются целыми между 0 и n–1 для некоторого n.
Алгоритм, разработанный Ривестом, Шамиром и Адлеманом, использует выражения с экспонентами. Данные шифруются блоками, каждый блок рассматривается как число, меньшее некоторого числа n. В результате шифрования числа М, М < n, получается число С.
Расшифрование выполняется следующим образом:
$$M = C^d (mod \quad n) = (M^e)^d (mod\quad n) = M^{ed} (mod \quad n)$$Как отправитель, так и получатель должны знать число n. Отправитель знает число, получатель знает число d. Таким образом, открытый ключ есть KU = {e, n} и закрытый ключ есть KR = {d, n}. При этом должны выполняться следующие условия:
е, d и n такие, что Med = M (mod n) для всех М < n.Ме и Сd для всех значений М < n.d, зная е и n.Сначала рассмотрим первое условие. Нам необходимо выполнение равенства:
$$М^{ed} = М (mod \quad n)$$Рассмотрим некоторые математические понятия, свойства и теоремы, которые позволят нам определить e, d и n.
а · b = a·c (mod n), то b = c (mod n), если а и n взаимнопростые, т.е НОД (a, n) = 1.Zp - все числа, взаимнопростые с p и меньшие p. Если p - простое, то Zp - это все остатки. Обозначим w-1 такое число, что w · w-1 = 1 (mod p).
Тогда ∀ w ∈ Zp∃ z: w · z = 1 (mod p)
Доказательство этого следует из того, что т.к. w и p взаимнопростые, то при умножении всех элементов Zp на w по модулю р остатками будут все элементы Zp, возможно, переставленные. Таким образом, хотя бы один остаток будет равен 1.
φ(n)- число положительных чисел, меньших n и взаимнопростых с n. Если p - простое, то φ (р) = p-1.
Покажем, что если p и q - простые, то φ(p · q) = (p-1)·(q-1).
Перечислим числа, меньшие p · q, которые не являются взаимнопросты-ми с p · q:
Числа, которые делятся на р: {p, 2·p, ..., (q-1)·p}. Таких чисел (q – 1).
Числа, которые делятся на q: {q, 2·q, ..., (p-1)·q}. Таких чисел (р - 1).
Таким образом
φ(p·q) = p·q - 1 - [(q-1)+(p-1)] = p·q - (p+q) + 1 = (p-1)·(q-1)
an-1 = 1 (mod n), если n - простое.
Если все элементы Zn умножить на а по модулю n, то в результате получим все элементы Zn, быть может, в другом порядке. Рассмотрим следующие числа:
{a (mod n), 2·a (mod n), ·, (n-1)·a (mod n)} являются числами {1, 2, ..., (n-1)}, быть может, в некотором другом порядке. Теперь перемножим по модулю n числа из этих двух множеств.
n и (n-1)! являются взаимнопростыми, если n – простое.
Следовательно, an-1 = 1 (mod n).
aφ(n) = 1 (mod n)для всех взаимнопростых a и n.
Это верно, если n - простое, т.к. в этом случае φ(n) = n-1. Рассмотрим множество R = {x1, x2,..., xf(n)}. Теперь умножим по модулю n каждый элемент этого множества на a. Получим множество S = {a·x1 (mod n), a·x2 (mod n), ..., a·xφ(n) (mod n)}. Это множество является перестановкой множества R по следующим причинам.
Так как а является взаимнопростым с n и xi являются взаимнопростыми с n, то a· xi также являются взаимнопростыми с n. Таким образом, S - это множество целых, меньших n и взаимнопростых с n.
В S нет дублей, т.к. если a · xi (mod n) = a·xj (mod n) · xi = xj.
Следовательно, перемножив элементы множеств S и R, получим:
Теперь рассмотрим сам алгоритм RSA. Пусть p и q - простые.
Надо доказать, что $$\forall M < n:M^{\phi(n)}=M^{(p-1)\cdot(q-1)}$$
Если НОД (M, n) = 1, то равенство выполняется. Теперь предположим, что НОД (M, n) ≠ 1, т.е. НОД (M, p · q) ≠ 1. Пусть НОД (M, p) ≠ 1, т.е. M = c · p, следовательно НОД (M, q) = 1, так как в противном случае M = c · p и M = l · q, но по условию M < p · q.
Следовательно,
$$M^{\phi(q)} = 1 (mod \quad q)\\ (M^{\phi(q)})^{\phi(p)} = 1 (mod \quad q)\\ M^{\phi(n)} = 1 (mod \quad q)$$По определению модуля это означает, что M φ(n) = 1 + k· q. Умножим обе части равенства на M = c · p. Получим M φ(n)+1 = c·p + k·q·c·p.
Таким образом, следует выбрать e и d такие, что е ·d = 1 (mod φ(n))
Или e = d -1 (mod φ (n))
e и d являются взаимнообратными по умножению по модулю φ(n). Заметим, что в соответствии с правилами модульной арифметики, такие взаимнообратные элементы существуют только в том случае, если d (и, следовательно, е) являются взаимнопростыми с φ(n). Таким образом, НОД(φ(n), d) = 1.
Теперь рассмотрим все элементы алгоритма RSA.
p, q - два простых целых числа- закрыты, выбираемы.
n = p·q - открыто, вычисляемо.
d, НОД (φ (n), d) = 1; 1 < d < φ (n) - закрыто, вычисляемо.
е = d –1 (mod φ (n)) - открыто, выбираемо.
Закрытый ключ состоит из {d, n}, открытый ключ состоит из {e, n}. Предположим, что пользователь А опубликовал свой открытый ключ, и что пользователь В хочет послать пользователю А сообщение М. Тогда В вычисляет С = Ме (mod n) и передает С. При получении этого зашифрованного текста пользователь А расшифрует вычислением М = Сd (mod n).
Суммируем алгоритм RSA:
Создание ключей
Выбрать простые р и q
Вычислить n = p•q
Выбрать d: НОД (φ(n), d) = 1; 1 < d <φ(n)
Вычислить е: е = d –1 (mod φ(n))
Открытый ключ KU = {e, n}
Закрытый ключ KR = {d, n}
Шифрование
Незашифрованное сообщение: М < n
Зашифрованное сообщение: С = Ме (mod n)
Расшифрование
Зашифрованное сообщение: С
Незашифрованное сообщение: М = Сd (mod n)
Рассмотрим конкретный пример:
Выбрать два простых числа: р = 7, q = 17.
Вычислить n = p•q = 7 • 17 = 119.
Вычислить φ(n) = (p – 1)•(q – 1) = 96.
Выбрать е так, чтобы е было взаимнопростым с φ(n) = 96 и меньше, чем φ(n): е = 5.
Определить d так, чтобы d•e = 1 (mod 96) и d < 96.
d = 77, так как 77 • 5 = 385 = 4 • 96 + 1.
Результирующие ключи открытый KU={5,119} и закрытый KR={77,119}.
Например, требуется зашифровать сообщение М = 19.
195 = 66 (mod 119); С = 66.
Для расшифрования вычисляется 6677 (mod 119) = 19.
Вычислительные аспекты
Рассмотрим сложность вычислений в алгоритме RSA при создании ключей и при шифровании / расшифровании.
1. Шифрование / расшифрование
Как шифрование, так и расшифрование включают возведение целого числа в целую степень по модулю n. При этом промежуточные значения будут громадными. Для того чтобы частично этого избежать, используется следующее свойство модульной арифметики:
Другая оптимизация состоит в эффективном использовании показателя степени, так как в случае RSA показатели степени очень большие. Предположим, что необходимо вычислить х16. Прямой подход требует 15 умножений. Однако можно добиться того же конечного результата с помощью только четырех умножений, если использовать квадрат каждого промежуточного результата: х2, х4, х8, х16.
2. Создание ключей
Создание ключей включает следующие задачи:
р и q.е и вычислить d.Прежде всего, рассмотрим проблемы, связанные с выбором р и q. Так как значение n = p•q будет известно любому потенциальному противнику, для предотвращения раскрытия р и q эти простые числа должны быть выбраны из достаточно большого множества, т.е. р и q должны быть большими числами. С другой стороны, метод, используемый для поиска большого простого числа, должен быть достаточно эффективным.
Алгоритм, который используется для нахождения простых чисел, выбирает случайное нечетное число из требуемого диапазона и проверяет, является ли оно простым. Если число не является простым, то опять выбирается случайное число до тех пор, пока не будет найдено простое.
Были разработаны различные тесты для определения того, является ли число простым. Это тесты вероятностные, то есть тест показывает, что данное число вероятно является простым. Несмотря на это проверка числа на таких тестах делает вероятность того, что число простой, близкой к единице. Если n "проваливает" тест, то оно не является простым. Если n "пропускает" тест, то n может как быть, так и не быть простым. Если n пропускает много таких тестов, то можно с высокой степенью достоверности сказать, что n является простым. Это достаточно долгая процедура, но она выполняется относительно редко: только при создании новой пары (KU, KR).
На сложность вычислений также влияет то, какое количество чисел будет отвергнуто перед тем, как будет найдено простое число. Результат из теории чисел, известный как теорема простого числа, говорит, что простых чисел, расположенных около n в среднем одно на каждые ln(n)чисел. Таким образом, в среднем требуется проверить последовательность из ln(n) целых, прежде чем будет найдено простое число. Так как все четные числа могут быть отвергнуты без проверки, то требуется выполнить приблизительно ln(n)/2 проверок. Например, если простое число ищется в диапазоне величин 2200, то необходимо выполнить около ln(2200) / 2 = 70 проверок.
Выбрав простые числа р и q, далее следует выбрать значение е так, чтобы НОД (φ(n), e) = 1 и вычислить значение d, d = e–1 (mod φ(n)). Существует единственный алгоритм, называемый расширенным алгоритмом Евклида, который за фиксированное время вычисляет наибольший общий делитель двух целых и если этот общий делитель равен единице, определяет инверсное значение одного по модулю другого. Таким образом, процедура состоит в генерации серии случайных чисел и проверке каждого относительно 1φ(n) до тех пор, пока не будет найдено число, взаимнопростое с φ(n). Возникает вопрос, как много случайных чисел придется проверить до тех пор, пока не найдется нужное число, которое будет взаимнопростым с φ(n). Результаты показывают, что вероятность того, что два случайных числа являются взаимнопростыми, равна 0.6.
Можно определить четыре возможных подхода для криптоанализа алгоритма RSA:
n на два простых сомножителя. Это даст возможность вычислить φ(n)=(p–1)•(q–1) и d=e–1 (mod φ(n)).р и q. Это также даст возможность определить d=e–1(mod φ(n)).d непосредственно, без начального определения φ(n).Защита от лобовой атаки для RSA и ему подобных алгоритмов состоит в использовании большой длины ключа. Таким образом, чем больше битов в е и d, тем лучше. Однако, так как вычисления, связанные с возведением в степень, необходимы как при создании ключей, так и при шифровании / расшифровании, чем больше размер ключа, тем медленнее работает система.
Большинство дискуссий о криптоанализе RSA фокусируется на задаче разложения n на два простых сомножителя. В настоящее время неизвестны алгоритмы, с помощью которых можно было бы разложить число на два простых множителя для очень больших чисел (т.е. несколько сотен десятичных цифр). Лучший из известных алгоритмов дает результат, пропорциональный
Пока не разработаны лучшие алгоритмы разложения числа на простые множители, можно считать, что величина n от 100 до 200 цифр в настоящее время является достаточно безопасной. На современном этапе считается, что число из 100 цифр может быть разложено на множители за время порядка двух недель. Для дорогих конфигураций (т.е. порядка $10 млн) число из 150 цифр может быть разложено приблизительно за год. Разложение числа из 200 цифр находится за пределами вычислительных возможностей. Например, даже если вычислительный уровень в 1012 операций в секунду достижим, что выше возможностей современных технологий, то потребуется свыше 10 лет для разложения на множители числа из 200 цифр с использованием существующих алгоритмов.
Для известных в настоящее время алгоритмов задача определения φ(n) по данным е и n, по крайней мере сопоставима по времени с задачей разложения числа на множители.
Для того чтобы избежать выбора значения n, которое могло бы легко раскладываться на сомножители, на р и q должно быть наложено много дополнительных ограничений:
р и q должны друг от друга отличаться по длине только несколькими цифрами. Таким образом, оба значения р и q должны быть от 1075 до 10100. (р – 1) и (q – 1) должны содержать большой простой сомножитель.НОД(p–1, q–1) должен быть маленьким.Первая публикация данного алгоритма открытого ключа появилась в статье Диффи и Хеллмана, в которой вводились основные понятия криптографии с открытым ключом и в общих чертах упоминался алгоритм обмена ключа Диффи-Хеллмана.
Цель алгоритма состоит в том, чтобы два участника могли безопасно обменяться ключом, который в дальнейшем может использоваться в каком-либо алгоритме симметричного шифрования. Сам алгоритм Диффи-Хеллмана может применяться только для обмена ключом.
Алгоритм основан на трудности вычислений дискретных логарифмов. Дискретный логарифм определяется следующим образом. Вводится понятие примитивного корня простого числа Q как числа, чьи степени создают все целые от 1 до Q–1. Это означает, что если А является примитивным корнем простого числа Q, тогда числа
являются различными и состоят из целых от 1 до Q–1 возможно с некоторыми перестановками.
В этом случае для любого целого B<Q и примитивного корня A простого числа Q можно найти единственную экспоненту Х, такую, что
Экспонента X называется дискретным логарифмом, или индексом Y, по основанию A (mod Q). Это обозначается как
Теперь опишем алгоритм обмена ключей Диффи-Хеллмана.
Общеизвестные элементы
Q - Простое число
A - A<Q и A является примитивным корнем Q
Предполагается, что существуют два известных всем числа: простое число Q и целое A, которое является примитивным корнем Q.
Создание пары ключей пользователем I
Выбор случайного числа Хi - закрытый ключ
Вычисление числа Yi - открытый ключ
Создание открытого ключа пользователем J
Выбор случайного числа Хj - закрытый ключ
Вычисление случайного числа Yj - открытый ключ
Теперь предположим, что пользователи I и J хотят обменяться ключом для алгоритма симметричного шифрования. Пользователь I выбирает случайное число Хi< Q и вычисляет Yi = AXi (mod Q). Аналогично пользователь J независимо выбирает случайное целое число Хj< Q и вычисляет Yj= AXj (mod Q).
Пользователи I и J обмениваются открытыми ключами Yi и Yj
Каждая сторона держит значение Х в секрете и делает значение Y доступным для другой стороны.
Создание общего секретного ключа пользователем I
$$K = (Y_j)^{ Xi }(mod\; Q)$$Создание общего секретного ключа пользователем J
$$K = (Y_i)^{ Xj }(mod\; Q)$$Теперь пользователь I вычисляет ключ К = (Yj)Xi (mod Q), и пользователь J вычисляет ключК = (Yi)Xj (mod Q). В результате оба получат одно и то же значение:
по правилам модульной арифметики
Таким образом, две стороны обменялись секретным ключом. Так как Хi и Хj являются закрытыми, противник может получить только следующие значения: Q, A, Yi и Yj. Для вычисления общего ключа атакующий должен взломать дискретный логарифм, т.е. вычислить
Безопасность обмена ключа в алгоритме Диффи-Хеллмана вытекает из того факта, что, хотя относительно легко вычислить экспоненты по модулю простого числа, но очень трудно вычислить дискретные логарифмы. Для больших простых чисел задача считается неразрешимой.
Следует заметить, что данный алгоритм уязвим для атак типа "man-in-the-middle". Если противник может осуществить активную атаку, т.е. имеет возможность не только перехватывать сообщения, но и заменять их другими, он может перехватить открытые ключи участников Yi и Yj, создать свою пару открытого и закрытого ключа (Xоп, Yоп)и послать каждому из участников свой открытый ключ. После этого каждый участник вычислит ключ, который будет общим с противником, а не с другим участником. Если нет аутентификации хотя бы одной из сторон внешним по отношению к алгоритму Диффи-Хеллмана способом, то участники не смогут обнаружить подобную подмену.
Национальный институт стандартов и технологии США (NIST) разработал федеральный стандарт цифровой подписи DSS. Для создания цифро-вой подписи используется алгоритм DSA (Digital Signature Algorithm). В качестве хэш-алгоритма стандарт предусматривает использование алго-ритма SHA-1 (Secure Hash Algorithm). DSS первоначально был предложен в 1991 году и пересмотрен в 1993 году в ответ на публикации, касающиеся безопасности его схемы.
Стандарт DSS может использоваться только для создания цифровой подписи. В отличие от RSA, его нельзя использовать для шифрования или обмена ключами. Тем не менее, это технология открытого ключа.
Рассмотрим отличия цифровых подписей, создаваемых DSS, от цифровых подписей, создаваемых такими алгоритмами как RSA.
(рис 4.4) Создание и проверка подписи с помощью алгоритма RSA
(рис 4.5) Создание и проверка подписи с помощью стандарта DSS
В алгоритме RSA подписываемое сообщение подается на вход сильной хэш-функции, которая создает хэш-код фиксированный длины. Для создания подписи этот хэш-код подписывается с использованием закрытого ключа отправителя. Затем сообщение и подпись пересылаются получателю. Получатель вычисляет хэш-код сообщения и проверяет подпись, используя открытый ключ отправителя. Если вычисленный хэш-код равен значению, полученному при проверки подписи, то считается, что подпись корректна.
В DSS также используется сильная хэш-функция. Хэш-код является входом функции подписи вместе со случайным числом k, созданным для этой конкретной подписи. Функция подписи также зависит от закрытого ключа отправителя KRА и множества параметров, известных всем участникам. Можно считать, что это множество состоит из глобального открытого ключа KUG. Результатом является подпись, состоящая из двух компонент, обозначаемых какS и R.
Для проверки подписи получатель также создает хэш-код полученного сообщения. Этот хэш-код вместе с подписью является входом в функцию верификации. Функция верификации зависит от глобального открытого ключа KUG и от открытого ключа отправителя KUА. Выходом функции верификации является значение, которое должно равняться компоненте R подписи, если подпись корректна. Функция подписи такова, что только отправитель, знающий закрытый ключ, может создать корректную подпись.
Теперь рассмотрим детали алгоритма, используемого в DSS.
DSS основан на трудности вычисления дискретных логарифмов и базируется на схеме, определенной ElGamal и Schnorr.
Общие компоненты группы пользователей
Существует три параметра, которые являются открытыми и могут быть общими для большой группы пользователей.
160-битное простое число q, т.е. 2159< q < 2160.
Простое число р длиной между 512 и 1024 битами должно быть таким, чтобы q делилось на (р – 1), т.е. 2L-1< p < 2L, где 512 < L < 1024 и (p-1)/q является целым.
g = h(p-1)/q (mod p), где h является целым между 1 и (р-1), и g должно быть больше единицы.
Зная эти значения, отправитель выбирает закрытый ключ и создает открытый ключ.
Закрытый ключ отправителя
Закрытый ключ х должен быть числом между 1 и (q-1)и должен быть выбран случайно или псевдослучайно.
x - случайное или псевдослучайное целое, 0 < x < q
Открытый ключ отправителя
Открытый ключ вычисляется следующим образом:
$$у = g^x (mod \;p)$$Вычислить у по известному х довольно просто. Однако, имея открытый ключ у, вычислительно невозможно определить х, который является дискретным логарифмом у по основанию g.
Случайное число, уникальное для каждой подписи.
k - случайное или псевдослучайное целое, 0<k<q, уникальное для каждого подписывания.
Подписывание
Для создания подписи отправитель вычисляет две величины, r и s, которые являются функцией от компонент открытого ключа (p, q, g), закрытого ключа пользователя х, хэш-кода сообщения Н(М) и целого k, которое должно быть создано случайно или псевдослучайно и должно быть уникальным при каждом подписывании.
Подпись равна (r, s).
Проверка подписи
Получатель выполняет проверку подписи, используя следующие формулы. Он вычисляет значение v, которое является функцией от компонент общего открытого ключа, открытого ключа отправителя и хэш-кода полученного сообщения. Если эта величина равна компоненте r в подписи, то подпись считается действительной.
Подпись корректна, если v = r
Докажем, что v = r в случае корректной подписи.
Лемма 1. Для любого целого t, если
По теореме Ферма, так как h является взаимнопростым с p, то
Следовательно, для любого неотрицательного целого n
Таким образом, для неотрицательных целых n и z мы имеем
Любое неотрицательное целое t может быть представлено единственным способом как t = nq + z, где n и z являются неотрицательными целыми и 0<z<q. Таким образом z = t (mod q).
Лемма 2. Для неотрицательных чисел a и b: g(a mod q + b mod q)(mod p) = g(a+b) mod q(mod p).
По лемме 1 мы имеем
$$g^{(a mod \;q + b mod \;q)}(mod\; p) = g^{(a mod \;q + b mod\; q) mod \;q(mod\; p)\\ = g^{(a + b) mod\; q}(mod\; p)$$Лемма 3. y(rw) mod q(mod p) = g(xrw) mod q(mod p)
По определению y = gx(mod p). Тогда:
Лемма 4. ((H(M) + x•r) • w) (mod q) = k
По определению s = (k-1• (H(M) + x•r)) (mod q). Кроме того, так как q является простым, любое неотрицательное целое меньшее q имеет мультипликативную инверсию. Т.е. (k •k-1) (mod q = 1). Тогда:
По определению w = s-1(mod q), следовательно, (w•s) (mod q)=1. Следовательно:
Так как 0 < k < q, то k (mod q) = k.
Теорема. Используя введенные выше определения для v и r, докажем, что v=r.
В отечественном стандарте ГОСТ 3410, принятом в 1994 году, исполь-зуется алгоритм, аналогичный алгоритму, реализованному в стандарте DSS. Оба алгоритма относятся к семейству алгоритмов ElGamal.
В стандарте ГОСТ 3410 используется хэш-функция ГОСТ 3411, которая создает хэш-код длиной 256 бит. Это во многом обуславливает требования к выбираемым простым числам p и q:
2509 < p < 2512 либо
21020 < p < 21024q должно быть простым числом в диапазоне
2254 < q < 2256q также должно быть делителем (р-1).Аналогично выбирается и параметр g. При этом требуется, чтобы gq(mod p ) = 1.
В соответствии с теоремой Ферма это эквивалентно условию в DSS, что g = h(p-1)/q(mod p).
Закрытым ключом является произвольное число х
Открытым ключом является число y
Для создания подписи выбирается случайное число k
Подпись состоит из двух чисел (r, s), вычисляемых по следующим формулам:
Еще раз обратим внимание на отличия DSS и ГОСТ 3410.
Используются разные хэш-функции: в ГОСТ 3410 применяется отечественный стандарт на хэш-функции ГОСТ 3411, в DSS используется SHA-1, которые имеют разную длину хэш-кода. Отсюда и разные требования на длину простого числа q: в ГОСТ 3410 длина q должна быть от 254 бит до 256 бит, а в DSS длина q должна быть от 159 бит до 160 бит.
По-разному вычисляется компонента s подписи. В ГОСТ 3410 компонента s вычисляется по формуле
В DSS компонента s вычисляется по формуле
Последнее отличие приводит к соответствующим отличиям в формулах для проверки подписи.
Получатель вычисляет
$$w = H(M)^{-1} (mod\; q)\\ u1 = w \cdot s (mod\; q)\\ u2 = (q-r) \cdot w (mod \;q)\\ v = ((g^{u1}\cdot y^{u2}) mod\; p) (mod\; q)$$Подпись корректна, если v = r.
Структура обоих алгоритмов довольно интересна. Заметим, что значение r совсем не зависит от сообщения. Вместо этого r есть функция от k и трех общих компонент открытого ключа. Мультипликативная инверсия k(mod p)(в случае DSS) или само значение k (в случае ГОСТ 4310) подается в функцию, которая, кроме того, в качестве входа имеет хэш-код сообщения и закрытый ключ пользователя. Эта функция такова, что получатель может вычислить r, используя входное сообщение, подпись, открытый ключ пользователя и общий открытый ключ.
В силу сложности вычисления дискретных логарифмов нарушитель не может восстановить k из r или х из s.
Другое важное замечание заключается в том, что экспоненциальные вычисления при создании подписи необходимы только для gk(mod p). Так как это значение от подписываемого сообщения не зависит, оно может быть вычислено заранее. Пользователь может заранее просчитать некоторое количество значений r и использовать их по мере необходимости для подписи документов. Еще одна задача состоит в определении мультипликативной инверсии k-1 (в случае DSS). Эти значения также могут быть вычислены заранее.
Подписи, созданные с использованием стандартов ГОСТ 3410 или DSS, называются рандомизированными, так как для одного и того же сообщения с использованием одного и того же закрытого ключа каждый раз будут создаваться разные значения подписи (r,s), поскольку каждый раз будет использоваться новое значение k. Подписи, созданные с применением алгоритма RSA, называются детерминированными, так как для одного и того же сообщения с использованием одного и того же закрытого ключа каждый раз будет создаваться одна и та же подпись.
Преимущество подхода на основе эллиптических кривых в сравнении с задачей факторизации числа, используемой в RSA, или задачей целочисленного логарифмирования, применяемой в алгоритме Диффи-Хеллмана и в DSS, заключается в том, что в данном случае обеспечивается эквивалент-ная защита при меньшей длине ключа.
В общем случае уравнение эллиптической кривой Е имеет вид:
В качестве примера рассмотрим эллиптическую кривую Е, уравнение которой имеет вид:
На этой кривой лежат только четыре точки, координаты которых являются целыми числами. Это точки
А (0, 0), В (1, -1), С (1, 0) и D (0, -1)
(рис 4.6) Пример эллиптической кривой с четырьмя точками
Для определения операции сложения двух точек на эллиптической кривой сделаем следующие предположения:
О принадлежит Е, в которой сходятся все вертикальные прямые.О.
(рис 4.7) Сложение точек на эллиптической кривой
Введем следующие правила сложения точек на эллиптической кривой:
О выступает в роли нулевого элемента. Так, О = –О, и для любой точки Р на эллиптической кривой Р + О = Р. х S=(x,y) и T=(x,-y). Эта прямая пересекает кривую и в бесконечно удаленной точке. Поэтому Р1 + Р2+ О = О и Р1 = –Р2.P и Q с разными координатами х, следует провести через эти точки прямую и найти точку пересечения ее с эллиптической кривой. Если прямая не является касательной к кривой в точках P или Q, то существует только одна такая точка, обозначим ее S. Согласно нашему предположению
P + Q + S = О
Следовательно,
P + Q = –S или
P + Q = T
Если прямая является касательной к кривой в какой-либо из точек P или Q, то в этом случае следует положить S=P или S=Q соответственно.
Чтобы удвоить точку Q, следует провести касательную в точке Q и найти другую точку пересечения S с эллиптической кривой. Тогда Q + Q = 2?Q = -S.
Введенная таким образом операция сложения подчиняется всем обычным правилам сложения, в частности коммутативному и ассоциативному законам. Умножение точки Р эллиптической кривой на положительное число k определяется как сумма k точек Р.
В криптографии с использованием эллиптических кривых все значения вычисляются по модулю р, где р является простым числом. Элементами данной эллиптической кривой являются пары неотрицательных целых чисел, которые меньше р и удовлетворяют частному виду эллиптической кривой:
Такую кривую будем обозначать Ep(a,b). При этом числа а и b должны быть меньше р и должны удовлетворять условию $$4a^3+ 27b^2(mod\; p) \ne 0$$. Множество точек на эллиптической кривой вычисляется следующим образом.
Для каждого такого значения х, что $$0 \leq х \leq р$$, вычисляется $$x^3+ ax + b(mod\; p)$$.
Для каждого из полученных таким образом значений выясняется, имеет ли это значение целочисленный квадратный корень. Если нет, то в Ep (a,b) нет точек с этим значением х. Если целочисленный корень существует, имеется два значения y, равные этим значениям квадратного корня. Исключением является случай, когда y равен нулю. Эти значения (x,y) и будут точками Ep(a,b).
Создание ключей:
Выбирается эллиптическая кривая Ep(a,b). Число точек на ней должно делиться на большое целое n.
Выбирается точка Р ∈ Ep(a,b).
Выбирается случайное число d ∈ [1,n-1].
Вычисляется Q = d×P.
Закрытым ключом является d, открытым ключом (E, P, n, Q).
Создание подписи:
Выбирается случайное число k ∈ [1,n-1].
Вычисляется k×P = (x1, y1) и r = x1 (mod n). Проверяется, чтобы r не было равно нулю, так как в этом случае подпись не будет зависеть от закрытого ключа. Если r = 0, то выбирается другое случайное число k.
Вычисляется
$$k^{-1}\; mod\; n$$Вычисляется
$$s = k^{-1}\cdot (Н(M) + d\cdot r) (mod\; n)$$Проверяется, чтобы s не было равно нулю, так как в этом случае необходимого для проверки подписи числа s-1(mod n) не существует. Если s=0, то выбирается другое случайное число k.
Подписью для сообщения М является пара чисел (r,s).
Проверка подписи:
Проверяется, что целые числа r и s принадлежат диапазону чисел [0,n-1]. В противном случае результат проверки отрицательный, и подпись отвергается.
Вычисляется
$$w = s^{-1}(mod \; n) \;и\; H(M)$$Вычисляется
$$u1 = H(M) \cdot w (mod \;n)\\ u2 = r \cdot w (mod \;n)$$Вычисляется
$$u_1\times P + u_2\times Q = (x_0, y_0)\\ v = x_0 (mod\; n)$$Подпись верна в том и только том случае, когда v = r.
Цифровая подпись обеспечивает аутентификацию отправителя, т.е. служит доказательством того, что сообщение было послано конкретным участником. Такая аутентификация с помощью цифровой подписи является более сильной, чем аутентификация с использованием общего секрета (пароля).
Сначала рассмотрим уязвимости, связанные с открытым ключом, и необходимость создания Инфраструктуры Открытого Ключа (Public Key Infrastructure - PKI). Затем определим ключевые термины, используемые в Инфраструктуре Открытого Ключа.
Одним из требований к алгоритмам цифровой подписи является требование, чтобы было вычислительно невозможно, зная открытый ключ KU, определить закрытый ключ KR. Казалось бы, открытый ключ KU можно распространять по небезопасным сетям и хранить в небезопасных репози-торях. Но при этом следует помнить, что при использовании цифровой подписи необходимо быть уверенным, что субъект, с которым осуществляется взаимодействие с использованием алгоритма открытого ключа, является собственником соответствующего закрытого ключа. В противном случае возможна атака, когда оппонент заменяет открытый ключ законного участника своим открытым ключом, оставив при этом идентификатор законного участника без изменения. Это позволит ему создавать подписи от имени законного участника и читать зашифрованные сообщения, послан-ные законному участнику, используя для этого свой закрытый ключ, соответствующий подмененному открытому ключу. Для предотвращения такой ситуации следует использовать сертификаты, которые являются структу-рами данных, связывающими открытый ключ с субъектом. Для связывания необходимо наличие доверенного сертификационного центра (Certification Authority – СА), который проверяет идентификацию субъекта и подписы-вает его открытый ключ и некоторую дополнительную информацию своим закрытым ключом.
Целью PKI является предоставление доверенного и действительного открытого ключа участника, а также управление всем жизненным циклом сертификата открытого ключа.
Основным понятием Инфраструктуры Открытого Ключа является понятие сертификата.
Сертификат участника, созданный СА, имеет следующие характеристики:
Мы будем рассматривать сертификаты Х.509, хотя существует доста-точно много сертификатов других форматов.
Стандарт Х.509 первоначально являлся частью стандарта Х.500 и описывал основные требования к аутентификации в Каталогах Х.500. Но Х.509 используется не только в контексте сервиса Каталога Х.500. Сертификаты, определяемые данным стандартом, используются практически всеми программными продуктами, относящимися к обеспечению сетевой безопасности.
Стандарты ITU-TX.509 и ISO/IEC 9594-8, которые впервые были опубликованы в 1988 году как часть рекомендаций Х.500 Директории, определили формат сертификата Х.509. Формат сертификата в стандарте 1988 года называется форматом версии 1 (v1). Стандарт Х.500 был пересмотрен в 1993 году, в результате чего было добавлено несколько новых полей в формат сертификата Х.509, который был назван форматом версии 2 (v2).
Опыт реализации первой и второй версий говорит о том, что форматы сертификата v1 и v2 имеют ряд недостатков. Самое важное, что для хранения различной информации требуется больше полей. В результате ISO/IEC, ITU-T и ANSI X9 разработали формат сертификата Х.509 версии 3 (v3). Формат v3 расширяет формат v2, обеспечивая возможность добавления дополнительных полей расширения. Конкретные типы полей расширения могут быть определены в стандартах или определены и зарегистрированы любой организацией или сообществом. В 1996 году стандартизация базового формата v3 была завершена.
Стандарт ISO/IEC, ITU-T и ANSI X9 являются очень общими, чтобы применять их на практике. Для того чтобы разрабатывать интероперабельные реализации, использующие сертификаты Х.509 v3, необходимо четко специфицировать формат сертификата Х.509 v3. Специалисты IETF разработали профиль сертификата X.509 v3 и опубликовали его в RFC 3280.
Основные элементы сертификата представлеы в таблице 1.8.
Часто используется следующая нотация для обозначения сертификата:
$$СА << A >>$$- сертификат пользователя А, выданный сертификационным центром СА.
СА подписывает сертификат своим закрытым ключом. Если соответствующий открытый ключ известен проверяющей стороне, то она может проверить, что сертификат, подписанный СА, действителен.
Так как сертификаты не могут быть изменены без обнаружения этого, их можно разместить в общедоступной директории и пересылать по открытым каналам связи без опасения, что кто-то может их изменить.
В любом случае если В имеет сертификат А, В уверен, что сообщение, которое он зашифровывает открытым ключом А, никто не может просмотреть, и что сообщение, подписанное закрытым ключом А, не изменялось.
Таблица 4.1
При большом количестве пользователей неразумно подписывать сертификаты всех пользователей у одного СА. Кроме того, если существует единственный СА, который подписывает сертификаты, каждый пользователь должен иметь копию открытого ключа СА, чтобы проверять подписи. Этот открытый ключ должен быть передан каждому пользователю абсолютно безопасным способом (с обеспечением целостности и аутентифика-ции), чтобы пользователь был уверен в подписанных им сертификатах. Таким образом, в случае большого количества пользователей лучше иметь несколько СА, каждый из которых безопасно предоставляет свой открытый ключ некоторому подмножеству пользователей.
Теперь предположим, что А получил сертификат от уполномоченного органа СА1, и В получил сертификат от уполномоченного органа СА2. Если А не знает безопасным способом открытый ключ СА2, то сертификат В, выданный СА2, для него бесполезен. А может прочитать сертификат В, но не в состоянии проверить подпись. Тем не менее, если два СА могут безопасно обмениваться своими открытыми ключами, возможна следующая процедура для получения А открытого ключа В.
1. А получает сертификат СА2, подписанный СА1. Так как А знает открытый ключ СА1 надежным способом, А может получить открытый ключ СА2 из данного сертификата и проверить его с помощью подписи СА1 в сертификате.
2. Затем А получает сертификат В, подписанный СА2. Так как А теперь имеет открытый ключ СА2 надежным способом, А может проверить подпись и безопасно получить открытый ключ В.
Для получения открытого ключа В А использует цепочку сертификатов. В приведенной выше нотации эта цепочка выглядит следующим образом:
$$СА_1<< СА_2>> СА_2<< B>>$$Аналогично В может получить открытый ключ А с помощью такой же цепочки:
$$СА2<< СА1 >> СА1<< А>>$$Данная схема не обязательно ограничена цепочкой из двух сертификатов. Для получения цепочки может использоваться путь СА произвольной длины. Цепочка, содержащая N элементов, выглядит следующим образом:
$$СА_1<< СА_2>> СА_2 << СА_3>> . . . СА_N<< B >>$$В этом случае каждая пара СА в цепочке (САi , САi+1 ) должна создать сертификаты друг для друга.
Все эти сертификаты CA необходимо разместить в каталоге, и пользователи должны иметь информацию о том, как они связаны друг с другом, чтобы получить путь к сертификату открытого ключа другого пользователя. Это определяет Инфраструктуру Открытого Ключа, изучению которой и посвящены следующие лекции.
Когда сертификат выпущен, считается, что он будет использоваться в течение всего своего периода действительности. Однако могут произойти события, в результате которых сертификат станет недействительным до завершения своего периода действительности. К таким событиям относится изменение имени, изменение связывания между субъектом и СА (например, сотрудник увольняется из организации) и компрометация или предположение компрометации соответствующего закрытого ключа. При таких обстоятельствах СА должен отменить сертификат.
Х.509 определяет следующий способ отмены сертификата. Предполагается, что каждый СА периодически выпускает подписанную структуру данных, называемую списком отмененных сертификатом (Certificate Revo-cation List – CRL). CRL является помеченным временем списком, который подписан СА или специальным выпускающим CRL и в котором перечис-лены отмененные на текущий момент сертификаты с неистекшим периодом действительности, указанным в сертификате. Данный список становится свободно доступен в открытом репозитории. Каждый отмененный сертификат идентифицируется в CRL своим серийным номером. Когда использующая сертификат система получает сертификат, эта система не только проверяет подпись сертификата и действительность, но также полу-чает свежий CRL и проверяет, не находится ли в этом CRL серийный номер сертификата. Понятие "свежий" может зависеть от локальной политики, но обычно означает самый последний выпущенный CRL. Новый CRL выпускается регулярно (например, каждый час, день или неделю). При получении уведомления об отмене запись добавляется в CRL.
Преимущество данного метода отмены состоит в том, что CRL могут распространяться теми же способами, что и сами сертификаты, а именно через небезопасные серверы и коммуникации.
При этом недостатком данного метода отмены CRL является то, что точность отмены ограничена периодом выпуска CRL. Например, если об отмене сообщено в текущий момент, то об отмене не будут оповещены использующие сертификат системы до тех пор, пока не будет выпущен новый CRL – это может занять час, день или неделю, в зависимости от частоты создания CRL.
Как и формат сертификата Х.509 v3, для того, чтобы обеспечить интероперабельность реализаций различных производителей, необходимо иметь строгий формат Х.509 CRLv2. Существуют также специальные про-токолы и соответствующие им форматы сообщений, поддерживающих on-line оповещения об отмене. On-line методы оповещения об отмене могут применяться в некоторых окружениях как альтернатива CRL. On-line проверка отмены может существенно уменьшить промежуток между отправ-кой сообщения об отмене и получением этой информации проверяющей стороной. После того как СА получает сообщение об отмене, любой запрос к on-line сервису будет корректно отображать действительность сертификата. Однако эти методы навязывают новые требования безопасности: проверяющая сторона должна доверять on-line сервису действительности, в то время как репозиторий не обязательно должен быть доверяемым.
В Инфраструктуре Открытого Ключа используются следующие термины и понятия.
Public Key Infrastructure (PKI)– инфраструктура открытого ключа – это множество аппаратуры, ПО, людей, политик и процедур, необходимых для создания, управления, хранения, распределения и отмены сертифика-тов, основанных на криптографии с открытым ключом.
End Entity (ЕЕ)– конечный участник, для которого выпущен данный сертификат. Важно заметить, что здесь под конечными участниками подразумеваются не только люди и используемые ими приложения, но также и исключительно сами приложения (например, для безопасности уровня IP).
Certificate Authority (CA)– сертификационный или удостоверяющий центр – это уполномоченный орган, который создает и подписывает сертификаты открытого ключа. Дополнительно СА может создавать пары закрытый/открытый ключ для конечного участника. Важно заметить, что СА отвечает за сертификаты открытого ключа в течение всего времени их жизни, а не только в момент выпуска.
Public Key Certificate (PKC)– сертификат открытого ключа или просто сертификат – это структура данных, содержащая открытый ключ конечного участника и другую информацию, которая подписана закрытым ключом СА, выпустившим данный сертификат.
Registration Authority (RA)– регистрационный центр - необязательный участник, ответственный за выполнение некоторых административных задач, необходимых для регистрации конечных участников. Такими задачами могут быть: подтверждение идентификации конечного участника; проверка значений, которые будут указаны в создаваемом сертификате; проверка, знает ли конечный участник закрытый ключ, соответствующий открытому ключу, указанному в сертификате. Заметим, что RA сам также является конечным участником.
Причины, по которым могут создаваться RA, разделяют на технические и организационные. К техническим относятся следующие причины:
Организационные причины для использования RA следующие:
Выпускающий CRL- необязательный компонент, которому СА делегирует функции опубликования списков отмененных сертификатов.
Certificate Policy (CP)– политика сертификата - поименованное множество правил, которое определяет применимость сертификата открытого ключа для конкретного сообщества или класса приложений с общими требованиями безопасности. Например, конкретная политика сертификата может указывать применимость сертификата открытого ключа для аутентификации транзакций данных при торговле товарами в данном ценовом диапазоне.
Certificate Practice Statement (CPS)– утверждение об используемой практике, в соответствии с которой сотрудники сертификационного центра выпускают сертификаты открытого ключа.
Relying Party (RP)– проверяющая сторона - пользователь или агент (например, клиент или сервер), который использует сертификат для надежного получения открытого ключа субъекта и, быть может, некоторой дополнительной информации.
Root CA – СА, которому непосредственно доверяет конечный участник; это означает безопасное получение открытого ключа корневого СА, требующее некоторых внешних по отношению к PKI шагов. Этот термин не означает, что корневой СА обязательно должен быть вершиной иерархии. Заметим, что термин "доверенный якорь" имеет то же значение, что и корневой СА в данном случае.
Репозиторий - система или набор распределенных систем, которые хранят сертификаты и CRL и предназначены для распределения этих сертификатов и CRL между конечными участниками.
Пользователи систем, основанных на открытом ключе, должны быть уверены, что когда они используют открытый ключ, субъект, с которым они связываются, является собственником соответствующего закрытого ключа. Эта уверенность достигается благодаря использованию сертификата открытого ключа, которые являются структурами данных, связывающих значения открытого ключа с субъектами. Связывание обеспечивается наличием доверенного СА, который проверяет идентификацию субъекта и подписывает каждый сертификат.
Сертификат имеет ограниченное время жизни, которое указывается в подписанном содержимом. Так как подпись и своевременность могут быть независимо проверены клиентом, использующим сертификат, сертификаты могут распространяться по небезопасным коммуникациям и серверным системам и кэшироваться в небезопасном хранилище в системах, исполь-зующих сертификаты.
Сертификаты используются для проверки действительности подписанных данных. Имеется определенная специфика, относящаяся к используемому алгоритму, но общий процесс выглядит следующим образом (заме-тим, что не существует особенностей, относящихся к порядку, в котором должны выполняться перечисленные проверки; разработчики свободны в выборе наиболее эффективного способа для своих систем).
Разработка алгоритмов асимметричного шифрования является величайшим и, возможно, единственным действительно революционным достижением в истории криптографии.
Алгоритмы асимметричного шифрования, называемые также алгоритмами с открытым ключом, принципиально отличаются от алгоритмов симметричного шифрования. Шифрование с открытым ключом является асимметричным, поскольку использует два различных ключа для шифрования и расшифрования, в отличие от симметричного шифрования, в котором для шифрования и расшифрования используется один и тот же ключ. Алгоритмы с открытым ключом гораздо больше основаны на свойствах математических функций, чем алгоритмы симметричного шифрования, использующие в основном только операции подстановки и перемещения. Наличие двух ключей имеет важное применение в таких областях, как аутентификация, распределение ключа и конфиденциальность.
Алгоритмы с открытым ключом разрабатывались для того, чтобы решить две наиболее трудные задачи, возникшие при использовании симметричного шифрования.
Первой задачей является распределение ключа. При симметричном шифровании требуется, чтобы обе стороны уже имели общий ключ, который каким-то образом должен быть им заранее передан. Диффи, один из основоположников шифрования с открытым ключом, заметил, что это требование отрицает всю суть криптографии, основное назначение которой поддерживать секретность коммуникаций.
Второй задачей является необходимость создания таких механизмов, при использовании которых невозможно было бы подменить кого-либо из участников, т.е. нужен аналог подписи, которая используется в реальном мире. Такой аналог обычно называется цифровой или электронной подписью (англ. вариант – Digital Signature). При использовании коммуникаций для решения широкого круга задач, например в коммерческих и частных целях, электронные сообщения и документы должны иметь эквивалент подписи, содержащейся в бумажных документах. Необходимо создать метод, при использовании которого все участники будут убеждены, что электронное сообщение было послано конкретным участником. Это более сильное требование, чем аутентификация с использованием пароля или общего секрета.
Диффи и Хеллман достигли значительных результатов, предложив способ решения обеих задач, который радикально отличается от всех предыдущих подходов к шифрованию.
Сначала рассмотрим общие черты алгоритмов шифрования с открытым ключом и требования к этим алгоритмам. Определим требования, которым должен соответствовать алгоритм, использующий один ключ для шифрования, другой ключ - для расшифрования, и при этом вычислительно невозможно определить ключ расшифрования, зная только алгоритм и ключ шифрования.
Кроме того, некоторые алгоритмы, например RSA, имеют следующее свойство: каждый из двух ключей может использоваться как для шифрования, так и для расшифрования.
Сначала рассмотрим алгоритмы, обладающие обеими характеристиками, а затем перейдем к алгоритмам открытого ключа, которые не обладают вторым свойством.
При описании симметричного шифрования и шифрования с открытым ключом будем использовать следующую терминологию. Ключ, используемый в симметричном шифровании, будем называть секретным ключом. Два ключа, используемые при шифровании с открытым ключом, будем называть открытым ключом (Key Public – KU) и закрытым ключом (Key Private – KR). Закрытый ключ держится в секрете, но называть его будем закрытым ключом, а не секретным, чтобы избежать путаницы с ключом, используемым в симметричном шифровании. Закрытый ключ будем обозначать KR, открытый ключ - KU.
Будем предполагать, что все участники имеют доступ к открытым ключам друг друга, а закрытые ключи создаются локально каждым участником и, следовательно, распределяться не должны.
В любое время участник может изменить свой закрытый ключ и опубликовать составляющий пару открытый ключ, заменив им старый открытый ключ.
Диффи и Хеллман описывают требования, которым должен удовлетворять алгоритм шифрования с открытым ключом.
KU, закрытый ключ KR).М, создать соответствующее зашифрованное сообщение:
$$С = Е_{KU} [М]$$KU, определить закрытый ключ KR.KU и зашифрованное сообщение С, восстановить исходное сообщение М.
Можно добавить шестое требование, хотя оно не выполняется для всех алгоритмов с открытым ключом:
Это достаточно сильные требования, которые вводят понятие односторонней функции с люком. Односторонней функцией называется такая функция, у которой каждый аргумент имеет единственное обратное значение, при этом вычислить саму функцию легко, а вычислить обратную функцию трудно.
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 неизвестно
Мы видим, что разработка конкретного алгоритма с открытым ключом зависит от открытия соответствующей односторонней функции с люком.
Как и в случае симметричного шифрования, алгоритм шифрования с открытым ключом уязвим для лобовой атаки. Контрмера стандартная: использовать ключи большей длины.
Криптосистема с открытым ключом использует не инвертируемые математические функции. Сложность вычислений таких функций не является линейной от количества битов ключа, а возрастает быстрее, чем ключ. Таким образом, размер ключа должен быть достаточно большим, чтобы сделать лобовую атаку непрактичной, и достаточно маленьким для возможности практического шифрования. На практике размер ключа делают таким, чтобы лобовая атака была непрактичной, но в результате скорость шифрования оказывается достаточно медленной для использования алгоритма в общих целях. Поэтому шифрование с открытым ключом в настоящее время в основном ограничивается приложениями управления ключом и создания подписи, в которых требуется шифрование или подписывание небольшого блока данных.
Другая форма атаки состоит в том, чтобы найти способ вычисления закрытого ключа, зная открытый ключ. Невозможно математически доказать, что данная форма атаки исключена для конкретного алгоритма открытого ключа. Таким образом, любой алгоритм, включая широко используемый алгоритм RSA, является подозрительным.
Наконец, существует форма атаки, специфичная для способов использования систем с открытым ключом. Это атака вероятного сообщения. Предположим, например, что посылаемое сообщение состоит исключи-тельно из 56-битного ключа сессии для алгоритма симметричного шифро-вания. Противник может зашифровать все возможные ключи, используя открытый ключ получателя. В этом случае атака сводится к лобовой атаке на 56-битный симметричный ключ. Защита от подобной атаки состоит в добавлении определенного количества случайных битов в простые сообщения.
Основными способами использования алгоритмов с открытым ключом являются шифрование / расшифрование, создание и проверка подписи и обмен ключа.
Шифрование с открытым ключом состоит из следующих шагов:
(рис 4.1) . Схема шифрования с открытым ключом
В создает пару ключей KUb и KRb, которые могут использоваться для шифрования и расшифрования передаваемых сообщений.В передает пользователю A некоторым надежным способом свой ключ шифрования, т.е. открытый ключ KUb. Составляющий пару закрытый ключ KRb держится в секрете.А хочет послать конфиденциальное сообщение В, он шифрует сообщение, используя открытый ключ В KUb.В получает сообщение, он расшифровывает его, используя свой закрытый ключKRb. Никто другой не сможет расшифровать сообщение, так как этот закрытый ключ знает только В.В надежно хранит свой закрытый ключ, никто не сможет расшифровать передаваемые сообщения.Создание и проверка подписи состоит из следующих шагов:
(рис 4.2) Схема создания и проверки подписи
A создает пару ключей KRA и KUA, которые могут использоваться для создания и проверки подписи.A передает пользователю В некоторым надежным способом свой ключ проверки подписи, т.е. открытый ключ KUA. Составляющий пару закрытый ключ KRA держится в секрете.A хочет послать подписанное сообщение пользователю В, он создает подпись SignKRa[M] этого сообщения, используя свой закрытый ключ KRA.В получает подписанное сообщение, он проверяет подпись VerKUa[M], используя открытый ключ KUA пользователя A. Никто другой не может подписать сообщение, так как этот закрытый ключ знает только A.A надежно хранит свой закрытый ключ, его подписи достоверны. Кроме того, невозможно изменить сообщение, не имея доступа к закрытому ключу А; тем самым обеспечивается аутентификация отправителя и целостность передаваемых данных. Все алгоритмы создания и проверки подписи имеют большую вычислительную нагрузку, так как связаны с возведением в большие степени. Более эффективным способом является подписывание небольшого блока битов, который является функцией от сообщения. Такой блок, называемый аутентификатором, должен обладать таким свойством, что любое изменение сообщения с большой веро-ятностью приводит к изменению его аутентификатора. Этот аутентификатор подписывается закрытым ключом отправителя, т.е. создается цифровая подпись. Далее эта технология будет рассматриваться в деталях.Важно подчеркнуть, что описанный процесс создания подписи не обеспечивает конфиденциальность. Это означает, что сообщение, посланное таким способом, невозможно изменить, но можно подсмотреть. Это очевидно в том случае, если подпись основана на аутентификаторе, так как само сообщение передается в явном виде. Но даже если осуществляется подписывание всего сообщения, конфиденциальность не обеспечивается, так как любой может получить исходное сообщение, используя открытый ключ отправителя.
Аутентификация защищает двух участников, которые обмениваются сообщениями, от взаимодействия с некоторой третьей стороной. Однако аутентификация, выполняемая с использованием общего секрета (пароля), не защищает участников друг от друга, тогда как и между ними тоже могут возникать определенные формы споров.
Например, предположим, что A посылает B аутентифицированное сообщение, и аутентификация осуществляется на основе общего секрета. Рассмотрим возможные проблемы, которые могут при этом возникнуть:
B может подделать сообщение и утверждать, что оно пришло от А. B достаточно просто создать сообщение и присоединить аутентификационный код, используя ключ, который разделяют A и B.
A может отрицать, что он посылал сообщение B. Так как B может подделать сообщение, у него нет способа доказать, что A действительно посылал его.
В ситуации, когда обе стороны не доверяют друг другу, необходимо нечто большее, чем аутентификация на основе общего секрета. Возможным решением подобной проблемы является использование цифровой подписи. Цифровая подпись должна обладать следующими свойствами:
1. Должна быть возможность проверить автора, дату и время создания подписи.
2. Должна быть возможность аутентифицировать содержимое во время создания подписи.
3. Подпись должна быть проверяема третьей стороной для разрешения споров.
Таким образом, создание цифровой подписи включает сервис аутентификации отправителя.
На основании этих свойств можно сформулировать следующие требования к цифровой подписи:
Сильная хэш-функция, зашифрованная закрытым ключом отправителя, удовлетворяет перечисленным требованиям.
Обмен ключей: две стороны взаимодействуют для обмена ключом сессии, который в дальнейшем можно использовать в алгоритме симметричного шифрования.
Некоторые алгоритмы можно задействовать тремя способами, в то время как другие могут использоваться одним или двумя способами.
Перечислим наиболее популярные алгоритмы с открытым ключом и возможные способы их применения.
Таблица 4.1
Диффи и Хеллман определили новый подход к шифрованию, что вы-звало к жизни разработку алгоритмов шифрования, удовлетворяющих тре-бованиям систем с открытым ключом. Одним из первых результатов был алгоритм, разработанный в 1977 году Роном Ривестом, Ади Шамиром и Леном Адлеманом и опубликованный в 1978 году. С тех пор алгоритм Rivest-Shamir-Adleman (RSA) широко применяется практически во всех приложениях, использующих криптографию с открытым ключом.
Алгоритм основан на использовании того факта, что задача факторизации является трудной, т.е. легко перемножить два числа, в то время как не существует полиномиального алгоритма нахождения простых сомножителей большого числа.
Алгоритм RSA представляет собой блочный алгоритм шифрования, где зашифрованные и незашифрованные данные являются целыми между 0 и n–1 для некоторого n.
Алгоритм, разработанный Ривестом, Шамиром и Адлеманом, использует выражения с экспонентами. Данные шифруются блоками, каждый блок рассматривается как число, меньшее некоторого числа n. В результате шифрования числа М, М < n, получается число С.
Расшифрование выполняется следующим образом:
$$M = C^d (mod \quad n) = (M^e)^d (mod\quad n) = M^{ed} (mod \quad n)$$Как отправитель, так и получатель должны знать число n. Отправитель знает число, получатель знает число d. Таким образом, открытый ключ есть KU = {e, n} и закрытый ключ есть KR = {d, n}. При этом должны выполняться следующие условия:
е, d и n такие, что Med = M (mod n) для всех М < n.Ме и Сd для всех значений М < n.d, зная е и n.Сначала рассмотрим первое условие. Нам необходимо выполнение равенства:
$$М^{ed} = М (mod \quad n)$$Рассмотрим некоторые математические понятия, свойства и теоремы, которые позволят нам определить e, d и n.
а · b = a·c (mod n), то b = c (mod n), если а и n взаимнопростые, т.е НОД (a, n) = 1.Zp - все числа, взаимнопростые с p и меньшие p. Если p - простое, то Zp - это все остатки. Обозначим w-1 такое число, что w · w-1 = 1 (mod p).
Тогда ∀ w ∈ Zp∃ z: w · z = 1 (mod p)
Доказательство этого следует из того, что т.к. w и p взаимнопростые, то при умножении всех элементов Zp на w по модулю р остатками будут все элементы Zp, возможно, переставленные. Таким образом, хотя бы один остаток будет равен 1.
φ(n)- число положительных чисел, меньших n и взаимнопростых с n. Если p - простое, то φ (р) = p-1.
Покажем, что если p и q - простые, то φ(p · q) = (p-1)·(q-1).
Перечислим числа, меньшие p · q, которые не являются взаимнопросты-ми с p · q:
Числа, которые делятся на р: {p, 2·p, ..., (q-1)·p}. Таких чисел (q – 1).
Числа, которые делятся на q: {q, 2·q, ..., (p-1)·q}. Таких чисел (р - 1).
Таким образом
φ(p·q) = p·q - 1 - [(q-1)+(p-1)] = p·q - (p+q) + 1 = (p-1)·(q-1)
an-1 = 1 (mod n), если n - простое.
Если все элементы Zn умножить на а по модулю n, то в результате получим все элементы Zn, быть может, в другом порядке. Рассмотрим следующие числа:
{a (mod n), 2·a (mod n), ·, (n-1)·a (mod n)} являются числами {1, 2, ..., (n-1)}, быть может, в некотором другом порядке. Теперь перемножим по модулю n числа из этих двух множеств.
n и (n-1)! являются взаимнопростыми, если n – простое.
Следовательно, an-1 = 1 (mod n).
aφ(n) = 1 (mod n)для всех взаимнопростых a и n.
Это верно, если n - простое, т.к. в этом случае φ(n) = n-1. Рассмотрим множество R = {x1, x2,..., xf(n)}. Теперь умножим по модулю n каждый элемент этого множества на a. Получим множество S = {a·x1 (mod n), a·x2 (mod n), ..., a·xφ(n) (mod n)}. Это множество является перестановкой множества R по следующим причинам.
Так как а является взаимнопростым с n и xi являются взаимнопростыми с n, то a· xi также являются взаимнопростыми с n. Таким образом, S - это множество целых, меньших n и взаимнопростых с n.
В S нет дублей, т.к. если a · xi (mod n) = a·xj (mod n) · xi = xj.
Следовательно, перемножив элементы множеств S и R, получим:
Теперь рассмотрим сам алгоритм RSA. Пусть p и q - простые.
Надо доказать, что $$\forall M < n:M^{\phi(n)}=M^{(p-1)\cdot(q-1)}$$
Если НОД (M, n) = 1, то равенство выполняется. Теперь предположим, что НОД (M, n) ≠ 1, т.е. НОД (M, p · q) ≠ 1. Пусть НОД (M, p) ≠ 1, т.е. M = c · p, следовательно НОД (M, q) = 1, так как в противном случае M = c · p и M = l · q, но по условию M < p · q.
Следовательно,
$$M^{\phi(q)} = 1 (mod \quad q)\\ (M^{\phi(q)})^{\phi(p)} = 1 (mod \quad q)\\ M^{\phi(n)} = 1 (mod \quad q)$$По определению модуля это означает, что M φ(n) = 1 + k· q. Умножим обе части равенства на M = c · p. Получим M φ(n)+1 = c·p + k·q·c·p.
Таким образом, следует выбрать e и d такие, что е ·d = 1 (mod φ(n))
Или e = d -1 (mod φ (n))
e и d являются взаимнообратными по умножению по модулю φ(n). Заметим, что в соответствии с правилами модульной арифметики, такие взаимнообратные элементы существуют только в том случае, если d (и, следовательно, е) являются взаимнопростыми с φ(n). Таким образом, НОД(φ(n), d) = 1.
Теперь рассмотрим все элементы алгоритма RSA.
p, q - два простых целых числа- закрыты, выбираемы.
n = p·q - открыто, вычисляемо.
d, НОД (φ (n), d) = 1; 1 < d < φ (n) - закрыто, вычисляемо.
е = d –1 (mod φ (n)) - открыто, выбираемо.
Закрытый ключ состоит из {d, n}, открытый ключ состоит из {e, n}. Предположим, что пользователь А опубликовал свой открытый ключ, и что пользователь В хочет послать пользователю А сообщение М. Тогда В вычисляет С = Ме (mod n) и передает С. При получении этого зашифрованного текста пользователь А расшифрует вычислением М = Сd (mod n).
Суммируем алгоритм RSA:
Создание ключей
Выбрать простые р и q
Вычислить n = p•q
Выбрать d: НОД (φ(n), d) = 1; 1 < d <φ(n)
Вычислить е: е = d –1 (mod φ(n))
Открытый ключ KU = {e, n}
Закрытый ключ KR = {d, n}
Шифрование
Незашифрованное сообщение: М < n
Зашифрованное сообщение: С = Ме (mod n)
Расшифрование
Зашифрованное сообщение: С
Незашифрованное сообщение: М = Сd (mod n)
Рассмотрим конкретный пример:
Выбрать два простых числа: р = 7, q = 17.
Вычислить n = p•q = 7 • 17 = 119.
Вычислить φ(n) = (p – 1)•(q – 1) = 96.
Выбрать е так, чтобы е было взаимнопростым с φ(n) = 96 и меньше, чем φ(n): е = 5.
Определить d так, чтобы d•e = 1 (mod 96) и d < 96.
d = 77, так как 77 • 5 = 385 = 4 • 96 + 1.
Результирующие ключи открытый KU={5,119} и закрытый KR={77,119}.
Например, требуется зашифровать сообщение М = 19.
195 = 66 (mod 119); С = 66.
Для расшифрования вычисляется 6677 (mod 119) = 19.
Вычислительные аспекты
Рассмотрим сложность вычислений в алгоритме RSA при создании ключей и при шифровании / расшифровании.
1. Шифрование / расшифрование
Как шифрование, так и расшифрование включают возведение целого числа в целую степень по модулю n. При этом промежуточные значения будут громадными. Для того чтобы частично этого избежать, используется следующее свойство модульной арифметики:
Другая оптимизация состоит в эффективном использовании показателя степени, так как в случае RSA показатели степени очень большие. Предположим, что необходимо вычислить х16. Прямой подход требует 15 умножений. Однако можно добиться того же конечного результата с помощью только четырех умножений, если использовать квадрат каждого промежуточного результата: х2, х4, х8, х16.
2. Создание ключей
Создание ключей включает следующие задачи:
р и q.е и вычислить d.Прежде всего, рассмотрим проблемы, связанные с выбором р и q. Так как значение n = p•q будет известно любому потенциальному противнику, для предотвращения раскрытия р и q эти простые числа должны быть выбраны из достаточно большого множества, т.е. р и q должны быть большими числами. С другой стороны, метод, используемый для поиска большого простого числа, должен быть достаточно эффективным.
Алгоритм, который используется для нахождения простых чисел, выбирает случайное нечетное число из требуемого диапазона и проверяет, является ли оно простым. Если число не является простым, то опять выбирается случайное число до тех пор, пока не будет найдено простое.
Были разработаны различные тесты для определения того, является ли число простым. Это тесты вероятностные, то есть тест показывает, что данное число вероятно является простым. Несмотря на это проверка числа на таких тестах делает вероятность того, что число простой, близкой к единице. Если n "проваливает" тест, то оно не является простым. Если n "пропускает" тест, то n может как быть, так и не быть простым. Если n пропускает много таких тестов, то можно с высокой степенью достоверности сказать, что n является простым. Это достаточно долгая процедура, но она выполняется относительно редко: только при создании новой пары (KU, KR).
На сложность вычислений также влияет то, какое количество чисел будет отвергнуто перед тем, как будет найдено простое число. Результат из теории чисел, известный как теорема простого числа, говорит, что простых чисел, расположенных около n в среднем одно на каждые ln(n)чисел. Таким образом, в среднем требуется проверить последовательность из ln(n) целых, прежде чем будет найдено простое число. Так как все четные числа могут быть отвергнуты без проверки, то требуется выполнить приблизительно ln(n)/2 проверок. Например, если простое число ищется в диапазоне величин 2200, то необходимо выполнить около ln(2200) / 2 = 70 проверок.
Выбрав простые числа р и q, далее следует выбрать значение е так, чтобы НОД (φ(n), e) = 1 и вычислить значение d, d = e–1 (mod φ(n)). Существует единственный алгоритм, называемый расширенным алгоритмом Евклида, который за фиксированное время вычисляет наибольший общий делитель двух целых и если этот общий делитель равен единице, определяет инверсное значение одного по модулю другого. Таким образом, процедура состоит в генерации серии случайных чисел и проверке каждого относительно 1φ(n) до тех пор, пока не будет найдено число, взаимнопростое с φ(n). Возникает вопрос, как много случайных чисел придется проверить до тех пор, пока не найдется нужное число, которое будет взаимнопростым с φ(n). Результаты показывают, что вероятность того, что два случайных числа являются взаимнопростыми, равна 0.6.
Можно определить четыре возможных подхода для криптоанализа алгоритма RSA:
n на два простых сомножителя. Это даст возможность вычислить φ(n)=(p–1)•(q–1) и d=e–1 (mod φ(n)).р и q. Это также даст возможность определить d=e–1(mod φ(n)).d непосредственно, без начального определения φ(n).Защита от лобовой атаки для RSA и ему подобных алгоритмов состоит в использовании большой длины ключа. Таким образом, чем больше битов в е и d, тем лучше. Однако, так как вычисления, связанные с возведением в степень, необходимы как при создании ключей, так и при шифровании / расшифровании, чем больше размер ключа, тем медленнее работает система.
Большинство дискуссий о криптоанализе RSA фокусируется на задаче разложения n на два простых сомножителя. В настоящее время неизвестны алгоритмы, с помощью которых можно было бы разложить число на два простых множителя для очень больших чисел (т.е. несколько сотен десятичных цифр). Лучший из известных алгоритмов дает результат, пропорциональный
Пока не разработаны лучшие алгоритмы разложения числа на простые множители, можно считать, что величина n от 100 до 200 цифр в настоящее время является достаточно безопасной. На современном этапе считается, что число из 100 цифр может быть разложено на множители за время порядка двух недель. Для дорогих конфигураций (т.е. порядка $10 млн) число из 150 цифр может быть разложено приблизительно за год. Разложение числа из 200 цифр находится за пределами вычислительных возможностей. Например, даже если вычислительный уровень в 1012 операций в секунду достижим, что выше возможностей современных технологий, то потребуется свыше 10 лет для разложения на множители числа из 200 цифр с использованием существующих алгоритмов.
Для известных в настоящее время алгоритмов задача определения φ(n) по данным е и n, по крайней мере сопоставима по времени с задачей разложения числа на множители.
Для того чтобы избежать выбора значения n, которое могло бы легко раскладываться на сомножители, на р и q должно быть наложено много дополнительных ограничений:
р и q должны друг от друга отличаться по длине только несколькими цифрами. Таким образом, оба значения р и q должны быть от 1075 до 10100. (р – 1) и (q – 1) должны содержать большой простой сомножитель.НОД(p–1, q–1) должен быть маленьким.Первая публикация данного алгоритма открытого ключа появилась в статье Диффи и Хеллмана, в которой вводились основные понятия криптографии с открытым ключом и в общих чертах упоминался алгоритм обмена ключа Диффи-Хеллмана.
Цель алгоритма состоит в том, чтобы два участника могли безопасно обменяться ключом, который в дальнейшем может использоваться в каком-либо алгоритме симметричного шифрования. Сам алгоритм Диффи-Хеллмана может применяться только для обмена ключом.
Алгоритм основан на трудности вычислений дискретных логарифмов. Дискретный логарифм определяется следующим образом. Вводится понятие примитивного корня простого числа Q как числа, чьи степени создают все целые от 1 до Q–1. Это означает, что если А является примитивным корнем простого числа Q, тогда числа
являются различными и состоят из целых от 1 до Q–1 возможно с некоторыми перестановками.
В этом случае для любого целого B<Q и примитивного корня A простого числа Q можно найти единственную экспоненту Х, такую, что
Экспонента X называется дискретным логарифмом, или индексом Y, по основанию A (mod Q). Это обозначается как
Теперь опишем алгоритм обмена ключей Диффи-Хеллмана.
Общеизвестные элементы
Q - Простое число
A - A<Q и A является примитивным корнем Q
Предполагается, что существуют два известных всем числа: простое число Q и целое A, которое является примитивным корнем Q.
Создание пары ключей пользователем I
Выбор случайного числа Хi - закрытый ключ
Вычисление числа Yi - открытый ключ
Создание открытого ключа пользователем J
Выбор случайного числа Хj - закрытый ключ
Вычисление случайного числа Yj - открытый ключ
Теперь предположим, что пользователи I и J хотят обменяться ключом для алгоритма симметричного шифрования. Пользователь I выбирает случайное число Хi< Q и вычисляет Yi = AXi (mod Q). Аналогично пользователь J независимо выбирает случайное целое число Хj< Q и вычисляет Yj= AXj (mod Q).
Пользователи I и J обмениваются открытыми ключами Yi и Yj
Каждая сторона держит значение Х в секрете и делает значение Y доступным для другой стороны.
Создание общего секретного ключа пользователем I
$$K = (Y_j)^{ Xi }(mod\; Q)$$Создание общего секретного ключа пользователем J
$$K = (Y_i)^{ Xj }(mod\; Q)$$Теперь пользователь I вычисляет ключ К = (Yj)Xi (mod Q), и пользователь J вычисляет ключК = (Yi)Xj (mod Q). В результате оба получат одно и то же значение:
по правилам модульной арифметики
Таким образом, две стороны обменялись секретным ключом. Так как Хi и Хj являются закрытыми, противник может получить только следующие значения: Q, A, Yi и Yj. Для вычисления общего ключа атакующий должен взломать дискретный логарифм, т.е. вычислить
Безопасность обмена ключа в алгоритме Диффи-Хеллмана вытекает из того факта, что, хотя относительно легко вычислить экспоненты по модулю простого числа, но очень трудно вычислить дискретные логарифмы. Для больших простых чисел задача считается неразрешимой.
Следует заметить, что данный алгоритм уязвим для атак типа "man-in-the-middle". Если противник может осуществить активную атаку, т.е. имеет возможность не только перехватывать сообщения, но и заменять их другими, он может перехватить открытые ключи участников Yi и Yj, создать свою пару открытого и закрытого ключа (Xоп, Yоп)и послать каждому из участников свой открытый ключ. После этого каждый участник вычислит ключ, который будет общим с противником, а не с другим участником. Если нет аутентификации хотя бы одной из сторон внешним по отношению к алгоритму Диффи-Хеллмана способом, то участники не смогут обнаружить подобную подмену.
Национальный институт стандартов и технологии США (NIST) разработал федеральный стандарт цифровой подписи DSS. Для создания цифро-вой подписи используется алгоритм DSA (Digital Signature Algorithm). В качестве хэш-алгоритма стандарт предусматривает использование алго-ритма SHA-1 (Secure Hash Algorithm). DSS первоначально был предложен в 1991 году и пересмотрен в 1993 году в ответ на публикации, касающиеся безопасности его схемы.
Стандарт DSS может использоваться только для создания цифровой подписи. В отличие от RSA, его нельзя использовать для шифрования или обмена ключами. Тем не менее, это технология открытого ключа.
Рассмотрим отличия цифровых подписей, создаваемых DSS, от цифровых подписей, создаваемых такими алгоритмами как RSA.
(рис 4.4) Создание и проверка подписи с помощью алгоритма RSA
(рис 4.5) Создание и проверка подписи с помощью стандарта DSS
В алгоритме RSA подписываемое сообщение подается на вход сильной хэш-функции, которая создает хэш-код фиксированный длины. Для создания подписи этот хэш-код подписывается с использованием закрытого ключа отправителя. Затем сообщение и подпись пересылаются получателю. Получатель вычисляет хэш-код сообщения и проверяет подпись, используя открытый ключ отправителя. Если вычисленный хэш-код равен значению, полученному при проверки подписи, то считается, что подпись корректна.
В DSS также используется сильная хэш-функция. Хэш-код является входом функции подписи вместе со случайным числом k, созданным для этой конкретной подписи. Функция подписи также зависит от закрытого ключа отправителя KRА и множества параметров, известных всем участникам. Можно считать, что это множество состоит из глобального открытого ключа KUG. Результатом является подпись, состоящая из двух компонент, обозначаемых какS и R.
Для проверки подписи получатель также создает хэш-код полученного сообщения. Этот хэш-код вместе с подписью является входом в функцию верификации. Функция верификации зависит от глобального открытого ключа KUG и от открытого ключа отправителя KUА. Выходом функции верификации является значение, которое должно равняться компоненте R подписи, если подпись корректна. Функция подписи такова, что только отправитель, знающий закрытый ключ, может создать корректную подпись.
Теперь рассмотрим детали алгоритма, используемого в DSS.
DSS основан на трудности вычисления дискретных логарифмов и базируется на схеме, определенной ElGamal и Schnorr.
Общие компоненты группы пользователей
Существует три параметра, которые являются открытыми и могут быть общими для большой группы пользователей.
160-битное простое число q, т.е. 2159< q < 2160.
Простое число р длиной между 512 и 1024 битами должно быть таким, чтобы q делилось на (р – 1), т.е. 2L-1< p < 2L, где 512 < L < 1024 и (p-1)/q является целым.
g = h(p-1)/q (mod p), где h является целым между 1 и (р-1), и g должно быть больше единицы.
Зная эти значения, отправитель выбирает закрытый ключ и создает открытый ключ.
Закрытый ключ отправителя
Закрытый ключ х должен быть числом между 1 и (q-1)и должен быть выбран случайно или псевдослучайно.
x - случайное или псевдослучайное целое, 0 < x < q
Открытый ключ отправителя
Открытый ключ вычисляется следующим образом:
$$у = g^x (mod \;p)$$Вычислить у по известному х довольно просто. Однако, имея открытый ключ у, вычислительно невозможно определить х, который является дискретным логарифмом у по основанию g.
Случайное число, уникальное для каждой подписи.
k - случайное или псевдослучайное целое, 0<k<q, уникальное для каждого подписывания.
Подписывание
Для создания подписи отправитель вычисляет две величины, r и s, которые являются функцией от компонент открытого ключа (p, q, g), закрытого ключа пользователя х, хэш-кода сообщения Н(М) и целого k, которое должно быть создано случайно или псевдослучайно и должно быть уникальным при каждом подписывании.
Подпись равна (r, s).
Проверка подписи
Получатель выполняет проверку подписи, используя следующие формулы. Он вычисляет значение v, которое является функцией от компонент общего открытого ключа, открытого ключа отправителя и хэш-кода полученного сообщения. Если эта величина равна компоненте r в подписи, то подпись считается действительной.
Подпись корректна, если v = r
Докажем, что v = r в случае корректной подписи.
Лемма 1. Для любого целого t, если
По теореме Ферма, так как h является взаимнопростым с p, то
Следовательно, для любого неотрицательного целого n
Таким образом, для неотрицательных целых n и z мы имеем
Любое неотрицательное целое t может быть представлено единственным способом как t = nq + z, где n и z являются неотрицательными целыми и 0<z<q. Таким образом z = t (mod q).
Лемма 2. Для неотрицательных чисел a и b: g(a mod q + b mod q)(mod p) = g(a+b) mod q(mod p).
По лемме 1 мы имеем
$$g^{(a mod \;q + b mod \;q)}(mod\; p) = g^{(a mod \;q + b mod\; q) mod \;q(mod\; p)\\ = g^{(a + b) mod\; q}(mod\; p)$$Лемма 3. y(rw) mod q(mod p) = g(xrw) mod q(mod p)
По определению y = gx(mod p). Тогда:
Лемма 4. ((H(M) + x•r) • w) (mod q) = k
По определению s = (k-1• (H(M) + x•r)) (mod q). Кроме того, так как q является простым, любое неотрицательное целое меньшее q имеет мультипликативную инверсию. Т.е. (k •k-1) (mod q = 1). Тогда:
По определению w = s-1(mod q), следовательно, (w•s) (mod q)=1. Следовательно:
Так как 0 < k < q, то k (mod q) = k.
Теорема. Используя введенные выше определения для v и r, докажем, что v=r.
В отечественном стандарте ГОСТ 3410, принятом в 1994 году, исполь-зуется алгоритм, аналогичный алгоритму, реализованному в стандарте DSS. Оба алгоритма относятся к семейству алгоритмов ElGamal.
В стандарте ГОСТ 3410 используется хэш-функция ГОСТ 3411, которая создает хэш-код длиной 256 бит. Это во многом обуславливает требования к выбираемым простым числам p и q:
2509 < p < 2512 либо
21020 < p < 21024q должно быть простым числом в диапазоне
2254 < q < 2256q также должно быть делителем (р-1).Аналогично выбирается и параметр g. При этом требуется, чтобы gq(mod p ) = 1.
В соответствии с теоремой Ферма это эквивалентно условию в DSS, что g = h(p-1)/q(mod p).
Закрытым ключом является произвольное число х
Открытым ключом является число y
Для создания подписи выбирается случайное число k
Подпись состоит из двух чисел (r, s), вычисляемых по следующим формулам:
Еще раз обратим внимание на отличия DSS и ГОСТ 3410.
Используются разные хэш-функции: в ГОСТ 3410 применяется отечественный стандарт на хэш-функции ГОСТ 3411, в DSS используется SHA-1, которые имеют разную длину хэш-кода. Отсюда и разные требования на длину простого числа q: в ГОСТ 3410 длина q должна быть от 254 бит до 256 бит, а в DSS длина q должна быть от 159 бит до 160 бит.
По-разному вычисляется компонента s подписи. В ГОСТ 3410 компонента s вычисляется по формуле
В DSS компонента s вычисляется по формуле
Последнее отличие приводит к соответствующим отличиям в формулах для проверки подписи.
Получатель вычисляет
$$w = H(M)^{-1} (mod\; q)\\ u1 = w \cdot s (mod\; q)\\ u2 = (q-r) \cdot w (mod \;q)\\ v = ((g^{u1}\cdot y^{u2}) mod\; p) (mod\; q)$$Подпись корректна, если v = r.
Структура обоих алгоритмов довольно интересна. Заметим, что значение r совсем не зависит от сообщения. Вместо этого r есть функция от k и трех общих компонент открытого ключа. Мультипликативная инверсия k(mod p)(в случае DSS) или само значение k (в случае ГОСТ 4310) подается в функцию, которая, кроме того, в качестве входа имеет хэш-код сообщения и закрытый ключ пользователя. Эта функция такова, что получатель может вычислить r, используя входное сообщение, подпись, открытый ключ пользователя и общий открытый ключ.
В силу сложности вычисления дискретных логарифмов нарушитель не может восстановить k из r или х из s.
Другое важное замечание заключается в том, что экспоненциальные вычисления при создании подписи необходимы только для gk(mod p). Так как это значение от подписываемого сообщения не зависит, оно может быть вычислено заранее. Пользователь может заранее просчитать некоторое количество значений r и использовать их по мере необходимости для подписи документов. Еще одна задача состоит в определении мультипликативной инверсии k-1 (в случае DSS). Эти значения также могут быть вычислены заранее.
Подписи, созданные с использованием стандартов ГОСТ 3410 или DSS, называются рандомизированными, так как для одного и того же сообщения с использованием одного и того же закрытого ключа каждый раз будут создаваться разные значения подписи (r,s), поскольку каждый раз будет использоваться новое значение k. Подписи, созданные с применением алгоритма RSA, называются детерминированными, так как для одного и того же сообщения с использованием одного и того же закрытого ключа каждый раз будет создаваться одна и та же подпись.
Преимущество подхода на основе эллиптических кривых в сравнении с задачей факторизации числа, используемой в RSA, или задачей целочисленного логарифмирования, применяемой в алгоритме Диффи-Хеллмана и в DSS, заключается в том, что в данном случае обеспечивается эквивалент-ная защита при меньшей длине ключа.
В общем случае уравнение эллиптической кривой Е имеет вид:
В качестве примера рассмотрим эллиптическую кривую Е, уравнение которой имеет вид:
На этой кривой лежат только четыре точки, координаты которых являются целыми числами. Это точки
А (0, 0), В (1, -1), С (1, 0) и D (0, -1)
(рис 4.6) Пример эллиптической кривой с четырьмя точками
Для определения операции сложения двух точек на эллиптической кривой сделаем следующие предположения:
О принадлежит Е, в которой сходятся все вертикальные прямые.О.
(рис 4.7) Сложение точек на эллиптической кривой
Введем следующие правила сложения точек на эллиптической кривой:
О выступает в роли нулевого элемента. Так, О = –О, и для любой точки Р на эллиптической кривой Р + О = Р. х S=(x,y) и T=(x,-y). Эта прямая пересекает кривую и в бесконечно удаленной точке. Поэтому Р1 + Р2+ О = О и Р1 = –Р2.P и Q с разными координатами х, следует провести через эти точки прямую и найти точку пересечения ее с эллиптической кривой. Если прямая не является касательной к кривой в точках P или Q, то существует только одна такая точка, обозначим ее S. Согласно нашему предположению
P + Q + S = О
Следовательно,
P + Q = –S или
P + Q = T
Если прямая является касательной к кривой в какой-либо из точек P или Q, то в этом случае следует положить S=P или S=Q соответственно.
Чтобы удвоить точку Q, следует провести касательную в точке Q и найти другую точку пересечения S с эллиптической кривой. Тогда Q + Q = 2?Q = -S.
Введенная таким образом операция сложения подчиняется всем обычным правилам сложения, в частности коммутативному и ассоциативному законам. Умножение точки Р эллиптической кривой на положительное число k определяется как сумма k точек Р.
В криптографии с использованием эллиптических кривых все значения вычисляются по модулю р, где р является простым числом. Элементами данной эллиптической кривой являются пары неотрицательных целых чисел, которые меньше р и удовлетворяют частному виду эллиптической кривой:
Такую кривую будем обозначать Ep(a,b). При этом числа а и b должны быть меньше р и должны удовлетворять условию $$4a^3+ 27b^2(mod\; p) \ne 0$$. Множество точек на эллиптической кривой вычисляется следующим образом.
Для каждого такого значения х, что $$0 \leq х \leq р$$, вычисляется $$x^3+ ax + b(mod\; p)$$.
Для каждого из полученных таким образом значений выясняется, имеет ли это значение целочисленный квадратный корень. Если нет, то в Ep (a,b) нет точек с этим значением х. Если целочисленный корень существует, имеется два значения y, равные этим значениям квадратного корня. Исключением является случай, когда y равен нулю. Эти значения (x,y) и будут точками Ep(a,b).
Создание ключей:
Выбирается эллиптическая кривая Ep(a,b). Число точек на ней должно делиться на большое целое n.
Выбирается точка Р ∈ Ep(a,b).
Выбирается случайное число d ∈ [1,n-1].
Вычисляется Q = d×P.
Закрытым ключом является d, открытым ключом (E, P, n, Q).
Создание подписи:
Выбирается случайное число k ∈ [1,n-1].
Вычисляется k×P = (x1, y1) и r = x1 (mod n). Проверяется, чтобы r не было равно нулю, так как в этом случае подпись не будет зависеть от закрытого ключа. Если r = 0, то выбирается другое случайное число k.
Вычисляется
$$k^{-1}\; mod\; n$$Вычисляется
$$s = k^{-1}\cdot (Н(M) + d\cdot r) (mod\; n)$$Проверяется, чтобы s не было равно нулю, так как в этом случае необходимого для проверки подписи числа s-1(mod n) не существует. Если s=0, то выбирается другое случайное число k.
Подписью для сообщения М является пара чисел (r,s).
Проверка подписи:
Проверяется, что целые числа r и s принадлежат диапазону чисел [0,n-1]. В противном случае результат проверки отрицательный, и подпись отвергается.
Вычисляется
$$w = s^{-1}(mod \; n) \;и\; H(M)$$Вычисляется
$$u1 = H(M) \cdot w (mod \;n)\\ u2 = r \cdot w (mod \;n)$$Вычисляется
$$u_1\times P + u_2\times Q = (x_0, y_0)\\ v = x_0 (mod\; n)$$Подпись верна в том и только том случае, когда v = r.
Цифровая подпись обеспечивает аутентификацию отправителя, т.е. служит доказательством того, что сообщение было послано конкретным участником. Такая аутентификация с помощью цифровой подписи является более сильной, чем аутентификация с использованием общего секрета (пароля).
Сначала рассмотрим уязвимости, связанные с открытым ключом, и необходимость создания Инфраструктуры Открытого Ключа (Public Key Infrastructure - PKI). Затем определим ключевые термины, используемые в Инфраструктуре Открытого Ключа.
Одним из требований к алгоритмам цифровой подписи является требование, чтобы было вычислительно невозможно, зная открытый ключ KU, определить закрытый ключ KR. Казалось бы, открытый ключ KU можно распространять по небезопасным сетям и хранить в небезопасных репози-торях. Но при этом следует помнить, что при использовании цифровой подписи необходимо быть уверенным, что субъект, с которым осуществляется взаимодействие с использованием алгоритма открытого ключа, является собственником соответствующего закрытого ключа. В противном случае возможна атака, когда оппонент заменяет открытый ключ законного участника своим открытым ключом, оставив при этом идентификатор законного участника без изменения. Это позволит ему создавать подписи от имени законного участника и читать зашифрованные сообщения, послан-ные законному участнику, используя для этого свой закрытый ключ, соответствующий подмененному открытому ключу. Для предотвращения такой ситуации следует использовать сертификаты, которые являются структу-рами данных, связывающими открытый ключ с субъектом. Для связывания необходимо наличие доверенного сертификационного центра (Certification Authority – СА), который проверяет идентификацию субъекта и подписы-вает его открытый ключ и некоторую дополнительную информацию своим закрытым ключом.
Целью PKI является предоставление доверенного и действительного открытого ключа участника, а также управление всем жизненным циклом сертификата открытого ключа.
Основным понятием Инфраструктуры Открытого Ключа является понятие сертификата.
Сертификат участника, созданный СА, имеет следующие характеристики:
Мы будем рассматривать сертификаты Х.509, хотя существует доста-точно много сертификатов других форматов.
Стандарт Х.509 первоначально являлся частью стандарта Х.500 и описывал основные требования к аутентификации в Каталогах Х.500. Но Х.509 используется не только в контексте сервиса Каталога Х.500. Сертификаты, определяемые данным стандартом, используются практически всеми программными продуктами, относящимися к обеспечению сетевой безопасности.
Стандарты ITU-TX.509 и ISO/IEC 9594-8, которые впервые были опубликованы в 1988 году как часть рекомендаций Х.500 Директории, определили формат сертификата Х.509. Формат сертификата в стандарте 1988 года называется форматом версии 1 (v1). Стандарт Х.500 был пересмотрен в 1993 году, в результате чего было добавлено несколько новых полей в формат сертификата Х.509, который был назван форматом версии 2 (v2).
Опыт реализации первой и второй версий говорит о том, что форматы сертификата v1 и v2 имеют ряд недостатков. Самое важное, что для хранения различной информации требуется больше полей. В результате ISO/IEC, ITU-T и ANSI X9 разработали формат сертификата Х.509 версии 3 (v3). Формат v3 расширяет формат v2, обеспечивая возможность добавления дополнительных полей расширения. Конкретные типы полей расширения могут быть определены в стандартах или определены и зарегистрированы любой организацией или сообществом. В 1996 году стандартизация базового формата v3 была завершена.
Стандарт ISO/IEC, ITU-T и ANSI X9 являются очень общими, чтобы применять их на практике. Для того чтобы разрабатывать интероперабельные реализации, использующие сертификаты Х.509 v3, необходимо четко специфицировать формат сертификата Х.509 v3. Специалисты IETF разработали профиль сертификата X.509 v3 и опубликовали его в RFC 3280.
Основные элементы сертификата представлеы в таблице 1.8.
Часто используется следующая нотация для обозначения сертификата:
$$СА << A >>$$- сертификат пользователя А, выданный сертификационным центром СА.
СА подписывает сертификат своим закрытым ключом. Если соответствующий открытый ключ известен проверяющей стороне, то она может проверить, что сертификат, подписанный СА, действителен.
Так как сертификаты не могут быть изменены без обнаружения этого, их можно разместить в общедоступной директории и пересылать по открытым каналам связи без опасения, что кто-то может их изменить.
В любом случае если В имеет сертификат А, В уверен, что сообщение, которое он зашифровывает открытым ключом А, никто не может просмотреть, и что сообщение, подписанное закрытым ключом А, не изменялось.
Таблица 4.1
При большом количестве пользователей неразумно подписывать сертификаты всех пользователей у одного СА. Кроме того, если существует единственный СА, который подписывает сертификаты, каждый пользователь должен иметь копию открытого ключа СА, чтобы проверять подписи. Этот открытый ключ должен быть передан каждому пользователю абсолютно безопасным способом (с обеспечением целостности и аутентифика-ции), чтобы пользователь был уверен в подписанных им сертификатах. Таким образом, в случае большого количества пользователей лучше иметь несколько СА, каждый из которых безопасно предоставляет свой открытый ключ некоторому подмножеству пользователей.
Теперь предположим, что А получил сертификат от уполномоченного органа СА1, и В получил сертификат от уполномоченного органа СА2. Если А не знает безопасным способом открытый ключ СА2, то сертификат В, выданный СА2, для него бесполезен. А может прочитать сертификат В, но не в состоянии проверить подпись. Тем не менее, если два СА могут безопасно обмениваться своими открытыми ключами, возможна следующая процедура для получения А открытого ключа В.
1. А получает сертификат СА2, подписанный СА1. Так как А знает открытый ключ СА1 надежным способом, А может получить открытый ключ СА2 из данного сертификата и проверить его с помощью подписи СА1 в сертификате.
2. Затем А получает сертификат В, подписанный СА2. Так как А теперь имеет открытый ключ СА2 надежным способом, А может проверить подпись и безопасно получить открытый ключ В.
Для получения открытого ключа В А использует цепочку сертификатов. В приведенной выше нотации эта цепочка выглядит следующим образом:
$$СА_1<< СА_2>> СА_2<< B>>$$Аналогично В может получить открытый ключ А с помощью такой же цепочки:
$$СА2<< СА1 >> СА1<< А>>$$Данная схема не обязательно ограничена цепочкой из двух сертификатов. Для получения цепочки может использоваться путь СА произвольной длины. Цепочка, содержащая N элементов, выглядит следующим образом:
$$СА_1<< СА_2>> СА_2 << СА_3>> . . . СА_N<< B >>$$В этом случае каждая пара СА в цепочке (САi , САi+1 ) должна создать сертификаты друг для друга.
Все эти сертификаты CA необходимо разместить в каталоге, и пользователи должны иметь информацию о том, как они связаны друг с другом, чтобы получить путь к сертификату открытого ключа другого пользователя. Это определяет Инфраструктуру Открытого Ключа, изучению которой и посвящены следующие лекции.
Когда сертификат выпущен, считается, что он будет использоваться в течение всего своего периода действительности. Однако могут произойти события, в результате которых сертификат станет недействительным до завершения своего периода действительности. К таким событиям относится изменение имени, изменение связывания между субъектом и СА (например, сотрудник увольняется из организации) и компрометация или предположение компрометации соответствующего закрытого ключа. При таких обстоятельствах СА должен отменить сертификат.
Х.509 определяет следующий способ отмены сертификата. Предполагается, что каждый СА периодически выпускает подписанную структуру данных, называемую списком отмененных сертификатом (Certificate Revo-cation List – CRL). CRL является помеченным временем списком, который подписан СА или специальным выпускающим CRL и в котором перечис-лены отмененные на текущий момент сертификаты с неистекшим периодом действительности, указанным в сертификате. Данный список становится свободно доступен в открытом репозитории. Каждый отмененный сертификат идентифицируется в CRL своим серийным номером. Когда использующая сертификат система получает сертификат, эта система не только проверяет подпись сертификата и действительность, но также полу-чает свежий CRL и проверяет, не находится ли в этом CRL серийный номер сертификата. Понятие "свежий" может зависеть от локальной политики, но обычно означает самый последний выпущенный CRL. Новый CRL выпускается регулярно (например, каждый час, день или неделю). При получении уведомления об отмене запись добавляется в CRL.
Преимущество данного метода отмены состоит в том, что CRL могут распространяться теми же способами, что и сами сертификаты, а именно через небезопасные серверы и коммуникации.
При этом недостатком данного метода отмены CRL является то, что точность отмены ограничена периодом выпуска CRL. Например, если об отмене сообщено в текущий момент, то об отмене не будут оповещены использующие сертификат системы до тех пор, пока не будет выпущен новый CRL – это может занять час, день или неделю, в зависимости от частоты создания CRL.
Как и формат сертификата Х.509 v3, для того, чтобы обеспечить интероперабельность реализаций различных производителей, необходимо иметь строгий формат Х.509 CRLv2. Существуют также специальные про-токолы и соответствующие им форматы сообщений, поддерживающих on-line оповещения об отмене. On-line методы оповещения об отмене могут применяться в некоторых окружениях как альтернатива CRL. On-line проверка отмены может существенно уменьшить промежуток между отправ-кой сообщения об отмене и получением этой информации проверяющей стороной. После того как СА получает сообщение об отмене, любой запрос к on-line сервису будет корректно отображать действительность сертификата. Однако эти методы навязывают новые требования безопасности: проверяющая сторона должна доверять on-line сервису действительности, в то время как репозиторий не обязательно должен быть доверяемым.
В Инфраструктуре Открытого Ключа используются следующие термины и понятия.
Public Key Infrastructure (PKI)– инфраструктура открытого ключа – это множество аппаратуры, ПО, людей, политик и процедур, необходимых для создания, управления, хранения, распределения и отмены сертифика-тов, основанных на криптографии с открытым ключом.
End Entity (ЕЕ)– конечный участник, для которого выпущен данный сертификат. Важно заметить, что здесь под конечными участниками подразумеваются не только люди и используемые ими приложения, но также и исключительно сами приложения (например, для безопасности уровня IP).
Certificate Authority (CA)– сертификационный или удостоверяющий центр – это уполномоченный орган, который создает и подписывает сертификаты открытого ключа. Дополнительно СА может создавать пары закрытый/открытый ключ для конечного участника. Важно заметить, что СА отвечает за сертификаты открытого ключа в течение всего времени их жизни, а не только в момент выпуска.
Public Key Certificate (PKC)– сертификат открытого ключа или просто сертификат – это структура данных, содержащая открытый ключ конечного участника и другую информацию, которая подписана закрытым ключом СА, выпустившим данный сертификат.
Registration Authority (RA)– регистрационный центр - необязательный участник, ответственный за выполнение некоторых административных задач, необходимых для регистрации конечных участников. Такими задачами могут быть: подтверждение идентификации конечного участника; проверка значений, которые будут указаны в создаваемом сертификате; проверка, знает ли конечный участник закрытый ключ, соответствующий открытому ключу, указанному в сертификате. Заметим, что RA сам также является конечным участником.
Причины, по которым могут создаваться RA, разделяют на технические и организационные. К техническим относятся следующие причины:
Организационные причины для использования RA следующие:
Выпускающий CRL- необязательный компонент, которому СА делегирует функции опубликования списков отмененных сертификатов.
Certificate Policy (CP)– политика сертификата - поименованное множество правил, которое определяет применимость сертификата открытого ключа для конкретного сообщества или класса приложений с общими требованиями безопасности. Например, конкретная политика сертификата может указывать применимость сертификата открытого ключа для аутентификации транзакций данных при торговле товарами в данном ценовом диапазоне.
Certificate Practice Statement (CPS)– утверждение об используемой практике, в соответствии с которой сотрудники сертификационного центра выпускают сертификаты открытого ключа.
Relying Party (RP)– проверяющая сторона - пользователь или агент (например, клиент или сервер), который использует сертификат для надежного получения открытого ключа субъекта и, быть может, некоторой дополнительной информации.
Root CA – СА, которому непосредственно доверяет конечный участник; это означает безопасное получение открытого ключа корневого СА, требующее некоторых внешних по отношению к PKI шагов. Этот термин не означает, что корневой СА обязательно должен быть вершиной иерархии. Заметим, что термин "доверенный якорь" имеет то же значение, что и корневой СА в данном случае.
Репозиторий - система или набор распределенных систем, которые хранят сертификаты и CRL и предназначены для распределения этих сертификатов и CRL между конечными участниками.
Пользователи систем, основанных на открытом ключе, должны быть уверены, что когда они используют открытый ключ, субъект, с которым они связываются, является собственником соответствующего закрытого ключа. Эта уверенность достигается благодаря использованию сертификата открытого ключа, которые являются структурами данных, связывающих значения открытого ключа с субъектами. Связывание обеспечивается наличием доверенного СА, который проверяет идентификацию субъекта и подписывает каждый сертификат.
Сертификат имеет ограниченное время жизни, которое указывается в подписанном содержимом. Так как подпись и своевременность могут быть независимо проверены клиентом, использующим сертификат, сертификаты могут распространяться по небезопасным коммуникациям и серверным системам и кэшироваться в небезопасном хранилище в системах, исполь-зующих сертификаты.
Сертификаты используются для проверки действительности подписанных данных. Имеется определенная специфика, относящаяся к используемому алгоритму, но общий процесс выглядит следующим образом (заме-тим, что не существует особенностей, относящихся к порядку, в котором должны выполняться перечисленные проверки; разработчики свободны в выборе наиболее эффективного способа для своих систем).
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.