Опубликован: 02.03.2017 | Доступ: свободный | Студентов: 2511 / 555 | Длительность: 21:50:00
Лекция 8:

Алгоритмы с открытыми ключами

Аннотация: Рассмотрены наиболее популярные алгоритмы с открытым ключом. В частности, алгоритм RSA, применяемый в банковской сфере, интересен своими особенностями, обусловленными результатами теории чисел. Рюкзачное шифрование и вероятностное шифрование также основаны на достаточно тонких теоретико-числовых фактах. Приведена криптосистема на эллиптических кривых(одна из возможных).

Концепция криптографии с открытым ключом была предложена Уитфилдом Диффи (Whitfield Diffie) и Мартином Хеллманом (Martin Hellman), и, независимо от них, Ральфом Мерклом (Ralph Merkle). Основная идея заключается в том, чтобы использовать ключи парами, состоящими из ключа зашифрования и ключа расшифрования, которые невозможно вычислить один из другого.

В 1976 г. вышла основополагающая работа [1]. С этого времени было создано много алгоритмов, использующих концепцию открытых ключей. Алгоритм является общедоступным, нет необходимости в секретных каналах связи. Общая схема выглядит следующим образом:

  1. Каждый пользователь генерирует пару ключей: один для шифрования, другой для расшифрования.
  2. Каждый пользователь публикует свой ключ шифрования, размещает его в открытом для всех доступе. Второй ключ, соответствующий открытому, сохраняется в секрете.
  3. Если пользователь A собирается послать сообщение пользователю B, он шифрует сообщение открытым ключом пользователя B.
  4. Когда пользователь B получает сообщение, он расшифровывет его с помощью своего личного (секретного) ключа. Другой получатель не сможет расшифровать сообщение, поскольку личный ключ B знает только B.

Мы подробно представим алгоритм RSA, являющийся популярным в приложениях.

8.1 Описание алгоритма RSA

В 1978 г. появилась работа [2], в которой Рон Райвест (Ron Rivest), Ади Шамир (Adi Shamir) и Лен Адлеман (Len Adleman) предложили алгоритм с открытым ключом. Схема Райвеста-Шамира-Адлемана (RSA) получила широкое распространение.

Опишем процесс шифрования. Исходный текст должен быть переведен в числовую форму, этот метод считается известным. В результате этого текст представляется в виде одного большого числа. Затем полученное число разбивается на части (блоки) так, чтобы каждая из них была числом в промежутке [0, N - 1] (о выборе N - см. ниже). Процесс шифрования одинаков для каждого блока. Поэтому мы можем считать, что блок исходного текста представлен числом x, 0\leq x < N.

Каждый абонент вырабатывает свою пару ключей. Для этого он генерирует два больших простых числа p и q, вычисляет произведение N=p\cdot q. Затем он вырабатывает случайное число e, взаимно простое со значением \varphi(N) = (p-1)(q-1) функции Эйлера от числа N, и находит число d из условия e \cdot d \equiv 1 ~(\mods  \varphi(N)). Так как \GCD(e,\varphi(N))=1, то такое число d существует и оно единственно. Пару (N,e) он объявляет открытым ключом и помещает в открытый доступ. Пара (N, d) является секретным ключом. Для расшифрования достаточно знать секретный ключ. Числа p, q, \varphi(N) в дальнейшем не нужны, поэтому их можно уничтожить.

Пользователь A, отправляющий сообщение x абоненту B, выбирает из открытого каталога пару (N,e) абонента B и вычисляет шифрованное сообщение y=x^e ~(\mods  N). Чтобы получить исходный текст, абонент B вычисляет y^d ~(\mods  N). Так как |\mathbb{Z}_N^{*}| = \varphi(N)=(p-1)(q-1), и e\cdot d = 1 + k\varphi(N) для некоторого целого числа k, то (x^e)^d = x^ed = x^{1+k\varphi(N)}=x\cdot x^{|\mathbb{Z}_N^{*}|}\equiv x ~(\mods  N).

Пример 8.1. Построим криптосистему RSA с p=7, q=17 и зашифруем сообщение x=19.

Находим: N=7\cdot 17=119, \varphi(N) = 6\cdot 16 = 96. Выбираем значение e с условиями e<96 и \GCD(e,\varphi(N))=1. Например, возьмём e=5. Находим d=e^{-1}~(\mods 96). Получаем d=77, так как 77\cdot 5 = 4\cdot 96 + 1. Открытый ключ: (119,5), секретный ключ: (119,77). Для зашифрования число x=19 возводим в степень 5 по модулю 119:


x^e = 19^5 = 2 476 099 \equiv 66 \ (\mods  119).

Итак, y=66. Расшифрование даёт:

x = 66^{77} ~(\mods  119) = 19.

Для ускорения возведения в степень по модулю необходимо использовать быстрый алгоритм возведения в степень, рассмотренный в первой лекции.

8.1.1. О стойкости RSA

Безопасность алгоритма RSA основана на трудоемкости разложения на множители больших чисел. Международная группа ученых вычислителей в январе 2010 года установила новый рекорд факторизации, разложив на простые множители 232-значное число. Следовательно, выбираемое N должно быть больше. Большинство общепринятых алгоритмов вычисления простых чисел p и q носят вероятностный характер.

8.1.2. О выборе чисел p и q

Для работы алгоритма RSA нужны большие простые числа. Существуют два подхода.

  • Генерация случайных чисел и последующя проверка их на простоту с помощью вероятностных тестов. Недостаток такого подхода в том, что числа будут простыми только с какой-то (очень высокой) вероятностью.
  • Генерация доказуемо простых чисел. Для этого существуют рекуррентные алгоритмы

Кроме разрядности p и q, к ним предъявляются следующие дополнительные требования:

  • числа не должны содержаться в списках известных больших простых чисел;
  • они не должны быть близкими, так как иначе можно воспользоваться для факторизации N методом Ферма и решить уравнение

    \left(\frac{p+q}{2}\right)^2 - N = \left(\frac{p-q}{2}\right)^2.

  • В алгоритме RSA всегда есть эквивалентные по расшифрованию показатели степеней, например d и d'=d+\LCM(p-1,q-1). При этом эквивалентных решений тем больше, чем больше \GCD(p-1,q-1). В лучшем случае \GCD(p-1,q-1)=2, p=2t+1, q=2s+1, где t, s - нечетые взаимно простые числа.

Чтобы исключить возможность применения методов факторизации, накладывают следующее ограничение: числа p-1, p+1, q-1, q+1 не должны разлагаться в произведение маленьких простых множителей, должны содержать в качестве сомножителя хотя бы одно большое простое число. В 1978 г. Райвест сформулировал наиболее сильные требования:

Числа p_1=(p-1)/2, p_2=(p+1)/2, q_1=(q-1)/2, q_2=(q+1)/2 должны быть простыми, причем p_1-1 и q_1-1 не должны разлагаться в произведение маленьких простых чисел.

8.1.3. О выборе параметров e и d

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

Однако выбор малых параметров e или d представляется небезопасным по ряду соображений. Если малым является секретный параметр d, то можно применить метод перебора малых значений до получения искомого числа d. А если малым является параметр e, то достаточно большое число открытых сообщений, удовлетворяющих неравенству x < \sqrt[e]{N}, будут зашифровываться простым возведением в степень y=x^e, и поэтому их можно найти путем извлечения корня степени e.

Другая аналогичная ситуация может сложиться, когда у нескольких абонентов используется одинаковая экспонента e. Тогда становится возможна атака на основе китайской теоремы об остатках (см. ниже).

8.1.4. Подготовка текста к шифрованию

Сначала нужно каким-либо способом представить текст сообщения в виде упорядоченного набора чисел по модулю N. Это еще не процесс шифрования, а только подготовка к нему.

Пример 8.2.Подготовим к зашифрованию девиз ПОЗНАЙ СЕБЯ,

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

Таблица 8.1. Таблица замен для примера
А Б В Г Д Е Ж З И Й К Л М Н О П Р
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
С Т У Ф X Ц Ч Ш Щ Ъ Ы Ь Э Ю Я \_
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 99

Текст ПОЗНАЙ СЕБЯ после замен букв на числа принимает вид: 2524172310199927151141.

Пусть в нашем примере p=149, q=157, тогда N = 23393. Поэтому цифровое представление открытого текста нужно разбить на блоки, меньшие, чем 23393. Одно из таких разбиений выглядит следующим образом:

2524 1723 10199 9271 511 41

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

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

Обратим внимание на то, что в этом примере каждую букву кодируем двузначным числом. Это сделано для предотвращения неоднозначности. Если бы мы пронумеровали буквы не по порядку, начиная с 1, т. е. А соответствует 1, Б соответствует 2 и т. д., то было бы непонятно, что обозначает блок 12: пару букв АБ или букву Л, двенадцатую букву алфавита. Конечно, для кодирования можно использовать любые однозначные соответствия между буквами и числами, например ASCII-кодировку, что чаще всего и делается.

Продолжим пример: выбираем p= 149, q=157, вычисляем \varphi(N) = 23 088. Теперь нужно выбрать число e, взаимно простое с \varphi(N). Наименьшее простое число, не делящее \varphi(N), равно 5. Положим e=5. Зашифруем сообщение поблочно. Для шифрования первого блока вычисляем 2524^{5} ~(\mods  23393) = 22752. Далее,

1723^5 (\mods 23393) = 6198,

10199^5 (\mods 23393) = 14204,

9271^5 (\mods 23393) = 23191,

511^5 (\mods 23393) = 10723,

41^5 (\mods 23393) = 14065.

Теперь шифрованный текст имеет вид: 22752619814204231911072314065.

В нашем примере N = 23393, e = 5. Расширенный алгоритм Евклида для чисел \varphi(N)=23 008 и e=5 даёт:

1=2\cdot 23008 - 9235\cdot 5 , \qquad \varphi(N)-9235=13583 \equiv 5^{-1} ~(\mods \varphi(N)).

Значит для расшифровки блоков шифртекста мы должны возвести блоки в степень 13583 по модулю 23393. Для первого блока 22752 шифртекста в примере получим:

22752^{13853} = 2524 (\mods 23393).

Разбиение числа на блоки можно произвести различными способами. При этом промежуточные результаты зависят от способа разбиения, однако конечный результат - не зависит.

Евгений Шаров
Евгений Шаров

как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами?

Юлия Мышкина
Юлия Мышкина

Обучение с персональным тьютором осуществляется по Скайпу или посредством переписки?