Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Слабые моменты реализации RSA.




Разделенный модуль: Поскольку арифметика остатков – дорогое удовольствие с точки зрения компьютера, весьма заманчиво разработать систему шифрования, в которой пользователи разделяют общий модуль N, но применяют различные открытые и закрытые экспоненты (Ei, di).

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

Предположим, что нападающим является один из законных клиентов криптосистемы, скажем пользователь номер 1. Он может найти значение секретной экспоненты пользователя 2 – d 2. Сначала он вычисляет p и q по известному ему d 1. Затем злоумышленник находит

j (N) = (p – 1)(q – 1) и, наконец, при помощи расширенного алгоритма Евклида раскрывает значение d 2 по формуле

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

(N, E 1) и (N, E 2).

Противник, нападающий извне, видит зашифрованные сообщения С 1 и C 2, где

Он может вычислить

и восстановить сообщение m по следующей схеме:

Пример. N = N 1 = N 2 = 18923, E 1 = 11 и E 2 = 5.

Предположим, что перехвачены шифртексты

C 1 = 1514 и C 2 = 8189,

соответствующие одному открытому тексту m. Тогда противник вычисляет T 1 = 1 и T 2 = 2, после чего раскрывает исходную информацию:

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

Малые шифрующие экспоненты:

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

N 1, N 2 и N 3

и одинаковой шифрующей экспонентой E = 3. Пусть некто посылает им одно сообщение m, зашифрованное тремя разными открытыми ключами. Нападающий видит три криптограммы:

C 1 = m 3 (mod N 1),

C 2 = m 3 (mod N 2),

C 3 = m 3 (mod N 3)

и с помощью китайской теоремы об остатках находит решение системы

{ X = Ci (mod Ni)| i = 1, 2, 3}

в виде

X = m 3 (mod N 1 N 2 N 3).

Но поскольку m 3 < N 1 N 2 N 3, целые числа X и m 3 должны совпадать. Поэтому, вычисляя обычный кубический корень из X, нападающий раскрывает сообщение m.

Пример.

N 1 = 323, N 2 = 299, N 3 = 341

и перехваченные сообщения

C 1 = 50, C 2 = 299, C 3 = 1,

Чтобы восстановить исходное сообщение m, находим решение системы

X = 300763 (mod N 1 N 2 N 3),

после чего извлекаем обычный кубический корень

m = X 1/3 = 67.

Вывод. При использовании малой шифрующей экспоненты E противник может восстановить циркулярное сообщение m для E пользователей.

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

 

При практической реализации RSA необходимо решить следующие задачи:

1. Генерация больших простых чисел p и q с проверкой выполнения соответствующих требований к ним.

2. Выбор экспонент e и d с соблюдением соответствующих требований.

3. Реализация операции вычисления xy (mod n).

 

Генерация большого простого числа:

1) Сгенерировать случайное n -битовое число p.

2) Установить старший и младший бит равными 1. (Старший бит гарантирует требуемую длину простого числа, а младший – обеспечивает его нечетность).

3) Убедиться, что p не делится на малые простые числа: 3, 5, 7, 11 и т.д. Во многих практических реализациях проверяется делимость p на все простые числа, меньшие 256. Наиболее надежна проверка делимости на все простые числа, меньшие 2000. Эти проверки можно выполнить на основе массива этих простых чисел.

4) Выполнить тест простоты Рабина-Миллера для некоторого случайного числа a. Если p проходит тест, сгенерировать другое случайное число a и повторить тест. Для ускорения проверки можно выбирать относительно небольшие значения a. Выполнить тест минимум пять раз. Если p не проходит один из тестов, то перейти к шагу 1).

Другой путь – не генерировать случайное число p в каждом тесте, а последовательно перебирать все нечетные числа, начиная со случайно выбранного числа, пока не найдется простое число.

Тест Рабина-Миллера:

Выбрать для тестирования число p. Вычислить b – число делений p – 1 на 2 (то есть 2 b – это наибольшая степень числа 2, на которую делится p – 1). Затем вычислить m, такое, что p = 1 + 2 b · m.

1) Выбрать случайное число a, меньшее p.

2) Установить j = 0 и z = am mod p.

3) Если z = 1 или если z = p – 1, то p проходит тест и может быть простым числом.

4) Если j > 0 и z = 1, то p не относится к простым числам.

5) Установить j = j + 1. Если j < b и z ¹ (p – 1), установить z = z 2 mod p и вернуться к шагу 4). Если z = p – 1, то p проходит тестирование и может быть простым числом.

6) Если j = b и z ¹ (p – 1), то p не относится к простым числам.

Выбор экспонент e и d:

1) Так как единственное требование к e – отсутствие общих множителей с числом φ (n) = (p - 1) · (q - 1), то логично выбирать небольшое e легко разложимое на простые множители и осуществлять проверку делением φ (n) на множители e. Либо выбирать простое e. Неплохо также выбирать e с минимальным количеством единиц в двоичном представлении, что ускорит операцию возведения в степень, реализованную следующим алгоритмом.

2) Так как очевидно, что d = e -1(mod p), то d находим при помощи расширенного алгоритма Евклида.

Алгоритм вычисления xy (mod n).

1) Представим y в двоичной системе счисления y = y 02 r + … + yr -12 + yr, где yi, цифры в двоичном представлении равные 0 или 1, y 0 = 1.

2) Положим x 0 = x и затем для i = 1,…, r вычислим

.

3) xr есть искомый вычет xy (mod n).

Криптосистема Эль-Гамаля.

Односторонняя функция - возведение в степень с фиксированным модулем P и основанием G.

H = Gx (mod P)

Обратная задача – задача дискретного логарифмирования

x = ind G , P H

является сложной.

Здесь опишем шифрование по Эль-Гамалю, использующее конечные поля. Существует и аналогичная система на эллиптических кривых.

В отличие от RSA, в алоритме Эль-Гамаля существуют некоторые открытые параметры, которые могут быть использованы большим числом пользователей. Они называются параметрами домена и выглядят следующим образом:

- P – «большое простое число», то есть число, насчитывающее около 1024 бит, такое, что P – 1 делится на другое, «среднее простое число» Q, лежащее неподалеку от 2160.

- G – элемент мультипликативной группы поля , порядок которой, как мы знаем делится на Q, причем

G ( P – 1)/ Q (mod P) ≠ 1.

Все параметры домена, то есть P, Q и G, выбираются таким образом, чтобы элемент G ( P – 1)/ Q был образующей абелевой группы A порядка Q. Информация об этой группе открыта и используется большим числом пользователей.

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

H = Gx (mod P).

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

Сообщение в этой ситеме представляется ненулевым элементом поля . Для его шифрования поступают следующим образом:

- генерируют случайный эфемерный ключ k,

- вычисляют C 1 = Gk,

- находят C 2 = m · Hk,

- выдают получившийся шифртекст в виде пары С = (С 1, С 2).

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

Чтобы расшифровать пару данных С = (С 1, С 2), производят следующие преобразования:

Пример. Q = 101, P = 809 и G = 3.

Легко проверить, что Q действительно делит число P – 1, а порядок элемента G в группе делится на Q. Порядок элемента G равен 808, поскольку

3808 = 1 (mod P),

и ни при каких меньших степенях такого равенства не получается.

В качестве пары открытого и закрытого ключа выберем

x = 68 и H = Gx = 368 = 65 (mod P).

Допустим, нам нужно зашифровать сообщение, численное представление которого равно

m = 100. Поступаем следующим образом.

- Генерируем случайный эфемерный ключ k = 89.

- Находим С 1 = Gk = 389 = 345 (mod P).

- Получаем С 2 = m · Hk = 100 · 6589 = 517 (mod P).

- Отправляем шифртекст C = (345, 517).

Адресат сможет восстановить текст, делая также вычисления:

Последнее равенство получается чуть более сложно, чем в вещественных числах: сначала число 345 возводится в степень 68 по модулю 809, вычисляется мультипликативный обратный к результату по этому же модулю, а затем найденный обратный умножается на 517.

Криптосистема Рабина.

Система базируется на трудности задачи факторизации больших целых чисел, а точнее на трудности извлечения квадратного корня по модулю составного числа N = p · q.

Эти задачи эквивалентны:

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

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

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

Выбираются два простых числа p и q, удовлетворяющие условию

p = q = 3 (mod 4).

Такой специальный вид чисел сильно ускоряет процедуру извлечения корней по модулю p и q. Закрытым ключом системы является пара

(p, q).

Для определения соответствующего открытого ключа берут произведение N = p · q и генерируют случайное целое число B Î {0, …, N – 1}. Открытый ключ это пара

(N, B).

Для шифрования сообщения m в алгоритме Рабина вычисляют

C = m (m + B) (mod N).

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

Расшифрование в этом алгоритме гораздо более сложное. По существу нужно вычислить

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

Объясним, почему при расшифровании мы действительно получаем m. Напомним, что шифртекст имеет вид

C = m (m + B) (mod N).

поэтому

Конечно предполагаем, что мы выбрали правильный корень из четырех.

Пример. Открытый и закрытый ключи имеют вид:

- p = 127, q = 131,

- N = 16637 и B = 12345.

Для шифрования сообщения m = 4410 вычисляем

C = m (m + B) (mod N) = 4633.

При обратной операции сначала находим

T = B 2/4 + C (mod N) = 1500,

а затем извлекаем квадратные корни из T по модулю p и q:

После этого, применяя китайскую теорему об остатках к паре

±22 (mod p) и ±37 (mod q),

находим квадратный корень из T по модулю N:

Четыре варианта расшифрования

4410, 5851, 15078, или 16519

получаются из формулы

.

 

Рюкзачные криптосистемы.

Задача об укладке рюкзака. Задано множество { vi } из k натуральных чисел и целое число S.

Требуется найти такое k -разрядное число n = (nk – 1 nk – 2n 1 n 0)2 (где ni Î {0, 1} суть значения разрядов в двоичной записи чиcла n), что , если такое n существует.

В зависимости от набора { vi } и числа S, такого решения может не быть вообще, решений может быть несколько или решение будет единственным. Такая задача является сложной.

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

Такая задача имеет эффективный алгоритм решения:

1. Положим W = S и j = k.

2. Начиная с nj – 1 и последовательно уменьшая j, полагаем все nj = 0 до тех пор, пока не придем к первому такому значению j (обозначим его через i 0), что . Положим

3. Заменим W на , положим j = i 0 и, если W > 0, то переходим к шагу 2.

4. Если W = 0, то цель достигнута. Если W > 0 и все оставшиеся vi больше W, то ясно, что решения n = (nk – 1 nk – 2n 1 n 0)2 задачи не существует. Если решение есть, то оно единственное.

Пример. Набор {2, 3, 7, 15, 31} является быстрорастущим набором, а S = 24. Тогда проходя пятерку значений справа налево, мы видим, что n 4 = 0 (31 > 24), n 3 = 1 (15 < 24 и в этот момент заменяем 24 на 24 – 15 = 9), n 2 = 1 (7 < 9 и в этот момент заменяем 9 на 9 – 7 = 2), n 1 = 0 (3 > 2), n 0 = 1 (2 = 2). Таким образом, получаем n = (01101)2 = 13.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...