Методы и средства защиты информации

advertisement
Методы и
средства защиты
информации
ЛЕКЦИЯ 19:
АСИММЕТРИЧНЫЙ АЛГОРИТМ ШИФРОВАНИЯ RSA
Тейс Г.Н., 2013
RSA

RSA (аббревиатура от фамилий Rivest, Shamir и
Adleman) — криптографический алгоритм с
открытым ключом, основывающийся на
вычислительной сложности задачи
факторизации больших целых чисел.

Криптосистема RSA стала первой системой,
пригодной и для шифрования, и для цифровой
подписи. Алгоритм используется в большом
числе криптографических приложений,
включая PGP, S/MIME, TLS/SSL,IPSEC/IKE и других.
2
История [1]
Опубликованная в ноябре 1976 года
статья Уитфилда Диффи и Мартина
Хеллмана «Новые направления в
криптографии» перевернула представление о
криптографических системах, заложив
основы криптографии с открытым ключом.
Разработанный впоследствии алгоритм Диффи
— Хеллмана позволял двум сторонам получить
общий секретный ключ, используя
незащищенный канал связи. Однако этот
алгоритм не решал проблему аутентификации.
Без дополнительных средств пользователи не
могли быть уверены, с кем именно они
сгенерировали общий секретный ключ.
3
История [2]
Изучив эту статью, трое учёных Рональд Ривест, Ади
Шамир и Леонард Адлеман из Массачусетского
технологического института приступили к поискам
математической функции, которая бы позволяла
реализовать сформулированную Уитфилдом
Диффи и Мартином
Хеллманом модель криптографической системы с
открытым ключом. После работы над более чем 40
возможными вариантами, им удалось найти
алгоритм, основанный на различии в том, насколько
легко находить большие простые числа и насколько
сложно раскладывать на множители произведение
двух больших простых чисел, получивший
впоследствии название RSA. Система была названа
по первым буквам фамилий её создателей.
4
История [3]
В августе 1977 года в колонке «Математические
игры» Мартина Гарднера в журнале Scientific
American, с разрешения Рональда Ривеста
появилось первое описание криптосистемы RSA.
Читателям также было предложено дешифровать
английскую фразу, зашифрованную описанным
алгоритмом:
5
История [4]
В качестве открытых параметров системы были использованы
числа n=1143816...6879541 (129 десятичных знаков, 425 бит,
также известно как RSA-129 и e=9007. За расшифровку была
обещана награда в 100 долларов США. По заявлению Ривеста,
для факторизации числа потребовалось бы более 40
квадриллионов лет. Однако чуть более чем через 15 лет, 3
сентября 1993 года было объявлено о старте проекта
распределённых вычислений с координацией через
электронную почту по нахождению сомножителей числа RSA129 и решению головоломки. На протяжении полугода более
600 добровольцев из 20 стран жертвовали процессорное
время 1600 машин (две из которых были факс-машинами). В
результате были найдены простые множители и
расшифровано исходное сообщение, которое представляет
собой фразу «THE MAGIC WORDS ARE SQUEAMISH OSSIFRAGE»
(«Волшебные слова — это брезгливый ягнятник»). Полученную
награду победители пожертвовали в фонд свободного
программного обеспечения.
6
История [5]

После публикации Мартина Гарднера полное
описание новой криптосистемы любой желающий
мог получить, выслав по почте запрос Рональду
Ривесту, с приложенным конвертом с обратным
адресом и марками на 35 центов. Полное описание
новой криптосистемы было опубликовано в журнале
«Communications of the ACM» в феврале 1978 года.

Заявка на патент была подана 14 декабря 1977 года, в
качестве владельца был указан MIT. Патент 4405829
был выдан 20 сентября 1983 года, а 21 сентября 2000
года срок его действия истёк. Однако за пределами
США у изобретателей патента на алгоритм не было,
так как в большинстве стран его необходимо было
получить до первой публикации.
7
История [6]

В 1982 году Ривест, Шамир и Адлеман
организовали компанию RSA Data Security.

В 1989 году RSA, вместе с симметричным
шифром DES, упоминается в RFC 1115, тем самым
начиная использование алгоритма в
зарождающейся сети Internet

В 1990 году министерство обороны США начинает
использовать алгоритм.

В ноябре 1993 года открыто публикуется версия 1.5
стандарта PKCS1, описывающего применение RSA
для шифрования и создания электронной
подписи. Последние версии стандарта также
доступны в виде RFC (RFC 2313 — 1.5, 1993 год; RFC
2437 — 2.0, 1998 год; RFC 3447 — 2.1, 2002 год).
8
Описание алгоритма
Введение [1]
Криптографические системы с открытым ключом
используют так называемые односторонние
функции, которые обладают следующим
свойством:

Если известно x, то f(x) вычислить относительно
просто

Если известно y = f(x), то для вычисления x нет
простого (эффективного) пути.
Под односторонностью понимается не
теоретическая однонаправленность, а практическая
невозможность вычислить обратное значение,
используя современные вычислительные средства,
за обозримый интервал времени.
9
Описание алгоритма
10
Введение [2]
В основу криптографической системы с открытым ключом RSA
положена сложность задачи факторизации произведения двух
больших простых чисел. Для шифрования используется
операция возведения в степень по модулю большого числа. Для
дешифрования за разумное время (обратной операции)
необходимо уметь вычислять функцию Эйлера от данного
большого числа, для чего необходимо знать разложения числа
на простые множители.
В криптографической системе с открытым ключом каждый
участник располагает как открытым ключом (public key), так и
закрытым ключом (private key). В криптографической системе
RSA каждый ключ состоит из пары целых чисел. Каждый участник
создаёт свой открытый и закрытый ключ самостоятельно.
Закрытый ключ каждый из них держит в секрете, а открытые
ключи можно сообщать кому угодно или даже публиковать их.
Открытый и закрытый ключи каждого участника обмена
сообщениями в криптосистеме RSA образуют «согласованную
пару» в том смысле, что они являются взаимно обратными, то
есть:
Описание алгоритма
11
Введение [3]
∀ сообщения m∈M, где M – множество допустимых
сообщений
∀ допустимых открытого и закрытого ключа P и S
∃ соответствующие функции шифрования Ep(x)
и расшифрования Ds(x), такие что
m = Ds(Ep(m)) = Ep(Ds(m))
Создание открытого и
секретного ключей [1]
RSA-ключи генерируются следующим образом:

Выбираются два различных случайных простых
числа p и q заданного размера (напр, 1024 бита
каждое)

Вычисляется их произведение n = p∙q, которое
называется модулем

Вычисляется значение функции Эйлера от числа n:
(n)=(p-1)(q-1)

Выбирается целое число e (1<e< (n)), взаимно
простое со значением функции (n). Обычно в
качестве e берут простые числа, содержащие
небольшое количество единичных бит в двоичной
записи, например, простые числа Ферма 17, 257
или 65537.
12
Создание открытого и
секретного ключей [2]


Число e называется открытой экспонентой (public
exponent)

Время, необходимое для шифрования с
использованием быстрого возведения в степень,
пропорционально числу единичных бит в e

Слишком малые значения (напр., 3) потенциально
могут ослабить безопасность схемы RSA
13
Вычисляется число d мультипликативно обратное
числу e по модулю (n), то есть число,
удовлетворяющее условию:
d∙e ≡ 1 mod (n)

Число d называется секретной экспонентой. Обычно,
оно вычисляется при помощи расширенного
алгоритма Евклида.
Создание открытого и
секретного ключей [3]
14

Пара {e,n} публикуется в качестве открытого ключа
RSA (RSA public key)

Пара {d,n} играет роль закрытого ключа (RSA private
key) и держится в секрете
Шифрование и
расшифрование [1]
Предположим, Боб хочет послать Алисе
сообщение m.
Сообщениями являются целые числа в интервале
от 0 до n-1.
15
Шифрование и
расшифрование [2]
Алгоритм шифрования:
1.
Взять открытый ключ (e,n) Алисы
2.
Взять открытый текст m
3.
Зашифровать сообщение с использованием
открытого ключа Алисы:
c = E(m) = me mod n
Алгоритм расшифрования:
1.
Принять зашифрованное сообщение c
2.
Взять свой закрытый ключ (d,n)
3.
Применить закрытый ключ для расшифрования
сообщения:
m = D(c) = cd mod n
16
Шифрование и
расшифрование [3]
Наиболее используемым в настоящее время
является смешанный алгоритм шифрования, в
котором сначала шифруется сеансовый ключ, а
потом уже с его помощью участники шифруют
свои сообщения симметричными системами.
После завершения сеанса сеансовый ключ как
правило уничтожается.
17
Шифрование и
расшифрование [4]
Алгоритм шифрования сеансового ключа
выглядит следующим образом:
18
Шифрование и
расшифрование [5]
19
Алгоритм шифрования:
1.
Взять открытый ключ (e,n) Алисы
2.
Взять открытый текст m
3.
Зашифровать сообщение с использованием открытого ключа Алисы: c =
E(m) = me mod n
4.
Расшифровать сообщение c с помощью сеансового ключа симметричным
алгоритмом: MA = Dm(c)
Алгоритм расшифрования:
1.
Принять зашифрованное сообщение c
2.
Взять свой закрытый ключ (d,n)
3.
Применить закрытый ключ для расшифрования сообщения: m = D(c) = cd
mod n
4.
Зашифровать сообщение MA с помощью сеансового ключа симметричным
алгоритмом: C = Em(MA)
В случае, когда сеансовый ключ больше, чем модуль n сеансовый ключ разбивают
на блоки нужной длины (в случае необходимости дополняют нулями) и шифруют
каждый блок.
Цифровая подпись [1]
Система RSA может использоваться не только для
шифрования, но и для цифровой подписи.
Предположим, что Алисе (стороне A) нужно
отправить Бобу (стороне B) сообщение m,
подтверждённое электронной цифровой подписью.
20
Цифровая подпись [2]
Алгоритм передачи сообщения, подтвержденного ЦП:
1.
Взять открытый текст m
2.
Создать цифровую подпись с помощью своего
секретного ключа {d,n}: s = SA(m) = md mod n
3.
Передать пару {m,s}, состоящую из сообщения и подписи.
Алгоритм расшифровки сообщения, подтверждённого ЦП:
1.
Принять пару {m,s}
2.
Взять открытый ключ {e,n} Алисы
3.
Вычислить прообраз сообщения из подписи: m’ = PA(s) = se
mod n
4.
Проверить подлинность подписи (и неизменность
сообщения), сравнив m и m’
21
Цифровая подпись [3]
Поскольку цифровая подпись обеспечивает как
аутентификацию автора сообщения, так и
подтверждение целостности содержимого
подписанного сообщения, она служит аналогом
подписи, сделанной от руки в конце рукописного
документа.
Важное свойство цифровой подписи заключается в том,
что её может проверить каждый, кто имеет доступ к
открытому ключу её автора. Один из участников обмена
сообщениями после проверки подлинности цифровой
подписи может передать подписанное сообщение
ещё кому-то, кто тоже в состоянии проверить эту
подпись. Например, сторона A может переслать
стороне B электронный чек. После того как сторона B
проверит подпись стороны A на чеке, она может
передать его в свой банк, служащие которого также
имеют возможность проверить подпись и осуществить
соответствующую денежную операцию.
22
Цифровая подпись [4]
Заметим, что подписанное сообщение m не зашифровано.
Оно пересылается в исходном виде и его содержимое не
защищено от нарушения конфиденциальности. Путём
совместного применения представленных выше схем
шифрования и цифровой подписи в системе RSA можно
создавать сообщения, которые будут и зашифрованы, и
содержать цифровую подпись. Для этого автор сначала
должен добавить к сообщению свою цифровую подпись, а
затем — зашифровать получившуюся в результате пару
(состоящую из самого сообщения и подписи к нему) с
помощью открытого ключа принадлежащего получателю.
Получатель расшифровывает полученное сообщение с
помощью своего секретного ключа. Если проводить аналогию
с пересылкой обычных бумажных документов, то этот процесс
похож на то, как если бы автор документа поставил под ним
свою печать, а затем положил его в бумажный конверт и
запечатал, с тем чтобы конверт был распечатан только тем
человеком, кому адресовано сообщение.
23
Скорость работы
алгоритма RSA [1]
Поскольку генерация ключей происходит
значительно реже операций, реализующих
шифрование, расшифрование, а также
создание и проверку цифровой подписи, задача
вычисления a = bc mod n представляет основную
вычислительную сложность. Эта задача может
быть разрешена с помощью алгоритма быстрого
возведения в степень. С использованием этого
алгоритма для вычисления me mod n требуется O
(ln e) операций умножения по модулю.
24
Скорость работы
алгоритма RSA [2]
Чтобы проанализировать время выполнения
операций с открытым и закрытым ключами,
предположим, что открытый ключ {e,n} и закрытый
ключ {d,n} удовлетворяют соотношениям log2e = O(1),
log2d ≤ β. Тогда в процессах их применения
выполняется соответственно O(1) и O(β) умножений
по модулю.
Таким образом время выполнения операций растёт
с увеличением количества ненулевых битов в
двоичном представлении открытой экспоненты e.
Чтобы увеличить скорость шифрования, значение e
часто выбирают равным 17, 257 или 65537 —
простым числам, двоичное представление которых
содержит лишь две единицы: 1710=100012,
25710=1000000012, 6553710=100000000000000012
(простые числа Ферма).
25
Скорость работы
алгоритма RSA [3]
По эвристическим оценкам длина секретной
экспоненты d, нетривиальным образом
зависящей от открытой экспоненты e и модуля n,
с большой вероятностью близка к длине n.
Поэтому расшифрование данных идёт
медленнее чем шифрование, а проверка
подписи быстрее чем её создание.
Алгоритм RSA намного медленнее, чем AES и
другие алгоритмы симметричные блочные
шифры.
26
Использование китайской
теоремы об остатках для
ускорения расшифрования
При расшифровании или подписывании сообщения в
алгоритме RSA показатель вычисляемой степени будет
довольно большим числом (порядка 1000 бит). Поэтому
требуется алгоритм, сокращающий количество операций.
Так как числа p и q в разложении N=pq известны
зашифровывающему, то можно вычислить:
Поскольку p и q - числа порядка 2512 на эти действия
потребуется два потенцирования с показателем 512
знаков по модулю 512-битового числа. Это существенно
быстрее, чем одно потенцирование с 1024-битовым
показателем по модулю числа с 1024 двоичными знаками.
Далее осталось восстановить m по mp и mq что можно
сделать с помощью китайской теоремы об остатках.
27
Криптоанализ RSA [1]
Стойкость алгоритма основывается на сложности
вычисления обратной функции к функции
шифрования
c = E(m) = me mod n.
Для вычисления m по известным c,e,n нужно найти
такой d, чтобы
e∙d ≡ 1 (mod φ(n))
то есть
d ≡ e-1 (mod φ(n))
28
Криптоанализ RSA [2]
Вычисление обратного элемента по модулю не
является сложной задачей, однако злоумышленнику
неизвестно значение φ(n). Для вычисления функции
Эйлера от известного числа n необходимо знать
разложение этого числа на простые множители.
Нахождение таких множителей и является сложной
задачей, а знание этих множителей — «потайной
дверцей» (backdoor), которая используется для
вычисления d владельцем ключа. Существует
множество алгоритмов для нахождения простых
сомножителей, так называемой факторизации,
самый быстрый из которых на сегодняшний день —
общий метод решета числового поля, скорость
которого для k-битного целого числа составляет
exp((c+o(1))k1/3 log2/3k для некоторого c<2.
29
Криптоанализ RSA [3]
В 2010 году группе учёных из Швейцарии, Японии, Франции,
Нидерландов, Германии и США удалось успешно
вычислить данные, зашифрованные при помощи
криптографического ключа стандарта RSA длиной 768 бит.
Нахождение простых сомножителей осуществлялось
общим методом решета числового поля. По словам
исследователей, после их работы в качестве надежной
системы шифрования можно рассматривать только RSAключи длиной 1024 бита и более. Причём от шифрования
ключом длиной в 1024 бит стоит отказаться в ближайшие
три-четыре года. С 31 декабря 2013 года браузеры Mozilla
перестанут поддерживать сертификаты удостоверяющих
центров с ключами RSA меньше 2048 бит.
Кроме того, при неправильной или неоптимальной
реализации или использовании алгоритма возможны
специальные криптографические атаки, такие как атаки
на схемы с малой секретной экспонентой или на схемы с
общим выбранным значением модуля.
30
Атака Винера на RSA [1]
В некоторых приложениях требуется ускорить
процесс расшифровывания в алгоритме RSA.
Поэтому выбирается небольшая
расшифровывающая экспонента. В случае когда
расшифровывающая экспонента d < N1/4 можно
определить d за полиномиальное время с
помощью атаки Винера, опирающейся на
непрерывные дроби.
31
Атака Винера на RSA [2]
Поскольку НОД(k,d)=1 то k/d подходящая дробь в
разложении дроби E/N в непрерывную. Таким
образом, можно узнать расшифровывающую
экспоненту, поочерёдно подставляя знаменатели
подходящих дробей в выражение:
(ME)d = M mod N
для некоторого случайного числа M. Получив
равенство, найдём d. Общее число подходящих
дробей, которое придётся проверить
оценивается как O (ln N)
32
Обобщённая атака
Винера
Атака Винера, описанная выше, возможна лишь в
том случае, когда атакующему известно о
неравенстве
где d — секретная экспонента, а N — модуль RSA.
Бонех и Дерфи, используя двумерный аналог
теоремы Копперсмита, смогли обобщить атаку
Винера на случай, когда
33
Применение RSA

Система RSA используется для защиты программного
обеспечения и в схемах цифровой подписи.

Также она используется в открытой системе
шифрования PGP и иных системах шифрования (к
примеру, DarkCryptTC и формат xdc) в сочетании
с симметричными алгоритмами.

Из-за низкой скорости шифрования (около 30 кбит/с при
512 битном ключе на процессоре 2 ГГц), сообщения
обычно шифруют с помощью более производительных
симметричных алгоритмов со случайным ключом
(сеансовый ключ), а с помощью RSA шифруют лишь этот
ключ, таким образом реализуется гибридная
криптосистема. Такой механизм имеет потенциальные
уязвимости ввиду необходимости использовать
криптостойкий генератор случайных чисел для
формирования случайного сеансового ключа
симметричного шифрования и эффективно
противостоящий атакам симметричный криптоалгоритм (в
данное время широкое применение
находят AES, IDEA, Serpent, Twofish).
34
Алгоритм шифрования
сеансового ключа [1]
Алгоритм шифрования сеансового ключа
выглядит следующим образом:
35
Алгоритм шифрования
сеансового ключа [2]
Алгоритм шифрования сеансового ключа:
1.
Взять открытый ключ (e,n) Алисы
2.
Создать случайный сеансовый ключ m
3.
Зашифровать сеансовый ключ с использованием
открытого ключа Алисы: c = E(m) = me mod n
Алгоритм расшифрования сеансового ключа:
1.
Принять зашифрованный сеансовый ключ Боба c
2.
Взять свой закрытый ключ (d,n)
3.
Применить закрытый ключ для расшифрования
сеансового ключа: m = D(c) = cd mod n
Далее оба участника шифруют свои сообщения с
помощью одного сеансового ключа.
36
Ваши вопросы
37
Download