Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Система шифрования Вижинера






Если ослабить требование шифровать каждую букву исходного текста отдельным значением ключа, то можно использовать конечную последовательности ключа: k = (k0, k1,..., kn-1), которая называется ключом пользователя. Для его использования повторяем эту цепочку теоретически до бесконечной последовательности. Таким образом, получим рабочий ключ k = (k0, k1,..., kn-1), kj = k(j mod r), 0 ≤ j < ∞. Например, при r = ∞ и ключе пользователя 11 22 33 44 55 66 77 рабочий ключ будет периодической последовательностью: 11 22 33 44 55 66 77 11 22 33 44 55 66 77 11 22 33 44 55 66 77...

Ключ представляет собой n – грамму (k0, k1,..., kn-1). Открытый текст

разбивается на n – граммы вида X = (x0, x1,..., xn-1). Каждая n – грамма преобразуется в n – грамму шифртекста Y = (y0, y1,..., yn-1) следующим образом: yi ≡ xi + ki (mod 33) для русского алфавита.

Подстановка Вижинера VIGk определяется так

VIGk: (x0, x1,..., xn-1) → (y0, y1,..., yn-1) = (x0+k0, x1+k1,..., xn-1+kn-1).

 

Таким образом:

1) исходный текст x делится на r фрагментов xi = (xi, xi+r,..., xi+r(n-1)),

0 ≤ i < r;

2) i -й фрагмент исходного текста xi шифруется при помощи подстановки

Цезаря Ck: (xi, xi+r,..., xi+r(n-1)) → (yi, yi+r,..., yi+r(n-1)).

Вариант системы подстановок Вижинера при n = 2 называется системой Вернама (1917 г). В то время ключ k = (k0, k1,..., kк-1) записывался на перфоленте. Каждая буква исходного текста в алфавите, расширенном некоторыми дополнительными знаками, сначала переводилась с использованием кода Бодо в пятибитовый символ. К исходному тексту Бодо добавлялся ключ (по модулю 2). Старинный телетайп фирмы AT& T со считывающим устройством Вернама и оборудованием для шифрования, использовался корпусом связи армии США.

Система шифрования Вижинера использует шифр замены на основе таблицы, которая представляет квадратную матрицу (R x R), где R – количество символов используемого алфавита. В первой строке матрицы располагаются символы в алфавитном порядке. Начиная со второй строки, символы записываются со сдвигом влево на одну позицию. Выталкиваемые символы освобождают позиции справа (циклический сдвиг). При использовании русского алфавита матрица Вижинера имеет размерность (33 х 33).

 

АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ_

БВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ_А

ВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ_АБ

...............................................................................................

_ АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ

 

Шифрование осуществляется с помощью ключа, состоящего из М неповторяющихся символов. Из полной матрицы Вижинера выделяется матрица шифрования Тш размерностью (М+1), R. Полная матрица Вижинера включает первую строку и строки, первые элементы которых совпадают с символами ключа.

 

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

А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я _

З И Й КЛ М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я _ А Б В Г Д Е Ж

Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я _ А Б В Г Д Е Ж З И Й К Л М

О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я _ А Б В Г Д Е Ж З И Й К Л М Н

Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ы Ъ Э Ю Я _ А Б В ГДЕ Ж З И

 

Шифруемый текст: " КРИПТОГРАФИЧЕКАЯ_Защита_информации"

 

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

1. Под каждой буквой шифруемого текста записываются буквы ключа, причем ключ повторяется требуемое количество раз;

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

Так, под первой буквой З шифруемого текста оказалась буква З ключа (совпадение). На пересечении столбца и строки, соответствующих букве З шифруемого текста, и букве З ключа находится буква С.

Исходный текст К Р И П Т О Г Р А Ф И Ч Е С К А Я  
Ключ З Н О Й З Н О Й З Н О Й З Н О Й З  
Текст после замены С Э Ц Ш Щ Ы С Щ З А Ц _ М Ю Ш Й Е  
Исходный текст _ З А Щ И Т А _ И Н Ф О Р М А Ц И И
Ключ Н О Й З Н О Й З Н О Й З Н О Й З Н О
Текст после замены И Х Й _ Х _ Й Ж Х Ы Э Х Э Ь Й Э Х Ц
                                       

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

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

2. В строке подматрицы таблицы шифрования, начинающейся с буквы ключа, отыскивается буква шифртекста;

3. Буква первой строки, находящаяся в соответствующем столбце, будет буквой расшифрованного текста.

Обобщенную систему Вижинера можно сформулировать следующим образом: пусть x Ì Zm – подмножество. Многоалфавитныйключшифрования K r есть набор π = (π 0, π 1 ,..., π r-1) перестановок π Ì S(Zm).

Обобщенная система Вижинера преобразует исходный текст (x0, x1,..., xn-1) в шифрованный текст (y0, y1,..., yn-1) при помощи ключа π = (π 0, π 1,..., π r-1) по правилу:

VIGk: (x0, x1,..., xn-1) → (y0, y1,..., yn-1) = (π 00), π 11),..., π n-1(xn-1)),

где π i = π i mod r.

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

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

Пример 42. Аналитическое преобразование многоалфавитной перестановкой с помощью шифрующей матрицы. В качестве ключа используем шифрующую матрицу вида:

 

 

19 4 8

L = 10 11 24

28 20 23

Зашифрование задается уравнением y = Lx над кольцом Z/32Z, где x, y – векторы состоящие из номеров букв три-грамм соответственно открытого и зашифрованного текста. Открытый текст ЗИМНЕЕСОЛНЦЕ разбивается на три - граммы: ЗИМ НЕЕ СОЛ НЦЕ. После перехода к номерам букв в алфавите этот текст примет вид: x1 = (7, 8, 12), x2 = (13, 5, 5), x3 = (17, 14, 11), x4 = (13, 22, 5). Поочередно умножаем матрицу на эти векторы. Получаем векторы зашифрованного текста: y1 = (5, 30, 24), y2 = (19, 17, 3), y3 = (19, 12, 17), y4 = (23, 12, 23), которым соответствует текст ЕЭШ УСВ УМС ЧМЧ.

Матрица расшифрования имеет вид

19 28 24

L-1 = 6 27 24

12 12 7

В результате расшифрования получаем открытый текст. ▲

 

Такой шифр для любого ключа сохраняет неподвижным нулевой вектор. Для исключения этого недостатка можно перейти от линейных преобразований к аффинным описываемым уравнением y = Lx +a, где a – вектор сдвига. Обратное преобразование описывается уравнением x = L-1(y – a).

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

 

5. 2. 2. Перестановки

Перестановки являются также несложным методом криптографического преобразования. Используется как правило в сочетании с другими методами. Перестановкой набора целых чисел (0, 1,..., n-1) называется его переупорядочение. Число перестановок из (0, 1,..., n-1) равно n! При шифровании перестановкой символы шифруемого текста переставляются по определенному правилу в пределах блока этого текста.

Введем обозначение σ для взаимно-однозначного отображения набора S = {s0, s1,..., sn-1}, состоящего из n элементов, на себя, т.е. σ: S → S ,

σ: si → sσ (i), 0 ≤ i < n. Будем говорить, что в этом смысле σ является перестановкой элементов S.

Криптографическим преобразованием T для алфавита Zm называется последовательность автоморфизмов: T = {T(n): 1 ≤ n < ∞ } T(n): Zm→ Zm,

1 ≤ n < ∞. Каждое T(n) является, таким образом, перестановкой n -грамм из Zm. Поскольку T(i) и T(j) могут быть определены независимо при i ≠ j, число криптографических преобразований исходного текста размерности n равно (mn)2!. Оно возрастает непропорционально при увеличении m и n: так, при m = 33 и n = 2 число различных криптографических преобразований равно 1089!. Отсюда следует, что потенциально существует большое число отображений исходного текста в зашифрованный.

Практическая реализация криптографических систем требует, чтобы преобразования {Tk: k Î K}, где K – множество ключей, были определены алгоритмами, зависящими от относительно небольшого числа параметров (ключей). При ручном способе шифрования часто применяют шифрующие таблицы. В качестве ключа в шифрующих таблицах используются:

· размер таблицы;

· слово или фраза, задающая перестановку;

· особенности структуры таблицы.

Пример 43. Используем шифрование методом перестановки, для которой ключом служит размер таблицы 5*7:

Шифруемое сообщение: " ШЕФ НАЗНАЧИЛ ВСТРЕЧУ В ПОЛНОЧЬ НА ПЛОЩАДИ" записываем в таблицу поочередно по столбцам.

Ш З Л Е О Ь О
Е Н В Ч Л Н Щ
Ф А С У Н А А
Н Ч Т В О П Д
А И Р П Ч Л И

 

После заполнения таблицы текстом сообщения по столбцам для формирования шифротекста считывают содержимое таблицы по строкам. В итоге получится сообщение: ШЗЛЕОЬОЕНВЧЛНЩФАСУНААНЧТВОПДАИРПЧЛИ

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

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

В качестве ключа возьмем слово ВЕЛИКАН, буквы которого пронумерованы по алфавиту. Шифруемое сообщение возьмем из предыдущего примера.

До перестановки После перестановки

В Е Л И К А Н   А В Е И К Л Н
                             
Ш З Л Е О Ь О   Ь Ш З Е О Л О
Е Н В Ч Л Н Щ   Н Е Н Ч Л В Щ
Ф А С У Н А А   А Ф А У Н С А
Н Ч Т В О П Д   П Н Ч В О Т Д
А И Р П Ч Л И   Л А И П Ч Р И
                                                                           
                                                                                                     

В правой таблице столбцы переставлены в соответствии с упорядоченными номерами букв ключа. При считывании содержимого правой таблицы по строкам и записи шифротекста группами по пять букв получим зашифрованное сообщение: ЬШЗЕОЛОНЕНЧЛВЩАФАУНСФПНЧВОТДЛАИПЧРИ▲

5.2.3. Гаммирование.

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

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

Гаммирование является широко применяемым криптографическим преобразованием. Шифром гаммирования называется шифр с алфавитом открытых сообщений Zm, совпадающим с алфавитом шифрованных сообщений и ключевым множеством K. При этом для любого открытого текста

A={a1, a2,...as, …}Î Zm и " kÎ K F(A, k) = b1, b2,..., bs, …

b1 = a1 + Ψ 1(k) mod (m)

bi = ai + Ψ i(a1, a2,..., ai-1, k) mod (m), i = 2, 3,...

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

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

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

Задача создания качественного шифра гаммирования заключается

в обеспечении следующих свойств.

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

2. Отсутствие возможности практического восстановления неизвестных отрезков гаммы и ключа по известным.

Первое свойство необходимо обеспечивать для невозможности дешифрования шифра гаммирования статистическими методами. Второе – для того чтобы по части открытого текста невозможно было восстановить весь текст или другие его отрезки.

Метод гаммирования становится бессильным, если злоумышленнику становится известен фрагмент исходного текста и соответствующая ему криптограмма. Простым вычитанием по модулю получается отрезок ПСП и по нему можно восстановить всю последовательность. Злоумышленник может сделать это на основе догадок о содержании исходного текста. Так, если большинство посылаемых сообщений начинается со слов " СОВ. СЕКРЕТНО", то криптоанализ всего текста значительно облегчается. Это следует учитывать при создании реальных систем информационной безопасности.

 

5.2.4. Операции, используемые при построении шифров

Ниже приведены наиболее типичные операции, применяемые в современных шифрах. Линейность или нелинейность операции рассматривается над полем F2.

1. Перестановка битов в блоке. Операция линейна. Перестановка описывается матрицей, в которой в каждой строке и в каждом столбце содеожится единственная единица, а остальные элементы – нулевые.

2. Подстановка n – разрядного слова вместо n – разрядного входного слова (операция замены). Операция при n > 2 нелинейная.

3. Циклический сдвиг (фиксированный). Операция является частным случаем перестановки.

4. Умножение на невырожденную матрицу. Если элементы матрицы лежат в кольце R, то этот оператор является линейным над R. Операция используется в качестве рассеивающего оператора в шифрах SAFER, RIJNDEL.

5. Сложение по модулю 2. Операция является " слабо" нелинейной, используется во многих шифрах (ГОСТ 28147 – 89, RC5, FIAL). Нелинейность обусловлена наличием и длиной переноса из предыдущего разряда в последующие при выполнении сложения.

6. Умножение по модулю простого числа. Операция является нелинейной, используется в шифре IDEA для простого числа p = 216 +1. Вычисления проводятся в группе Fp* порядка 216.

7. Нахождение обратного элемента в расширенном поле характеристики 2. Пусть p(t) – полином степени n, задающий расширенное конечное поле из 2n элементов. Вход n – разрядной подстановки представляется элементом x(t) этого поля. Выходом подстановки является элемент y(t) поля такой, что x(t)·y(t) ≡ 1 (mod p(t)) (такая подстановка вычисляется расширенным бинарным алгоритмом Евклида). Данная операция является нелинейной и используется в стандарте шифрования RIJNDAEL.

8. Возведение в степень по модулю простого числа Ферма p. Операция y = ax(mod p) является нелинейной. Используется в шифре SAFER.

 

 

6. АСИММЕТРИЧНЫЕ КРИПТОСИСТЕМЫ

6.1. Односторонние функции

Одним из центральных понятий криптосистем с открытым ключом

является понятие односторонней функции.

Односторонней функцией называется функция заданная на множестве X и областью значений в множестве Y, т.е. f: XY, обладающая двумя свойствами:

1. Существует полиномиальный алгоритм вычисления f(x);

2. Не существует полиномиальный алгоритм инвертирования функции

f(x), т.е. решения уравнения f(x) = y относительно y.

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

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

Другим важным примером кандидата на однонаправленную функцию является возведение в степень по модулю n в кольце классов вычетов Zn. Пусть a, x Î Z. Тогда модульное возведение в степень x (относительно основания a, находящегося в интервале от 1 до n -1 и модуля n) это функция, определяемая как f(x) = ax mod(n).

Сразу не очевидно, что такую функцию можно вычислить эффективно,

когда длина каждого из трех параметров a, n и x составляет несколько сотен знаков. Значение ax mod(n) вычисляется достаточно эффективно с помощью известной схемы Горнера «слева на право»

ax mod(n) = (((axk-1)2 ∙ (axk-2)2 ∙...∙ ax1)2 ∙ ax0 (mod n)

То, что это возможно, и в самом деле так, показывает следующий пример.

Пример 44. x49=((((x2*x)2)2)2)2*x

Пример 44 показывает, как можно вычислить x49 c помощью лишь пяти возведений в квадрат и еще двух умножений. При вычислении ax mod(n) приведение по модулю n желательно делать после каждого возведения в квадрат и каждого умножения, чтобы избежать получения очень больших целых чисел.

Обратная операция в Zn известна как задача дискретного логарифмирования: даны целые числа a, n и y, требуется найти такое целое x (если оно существует), чтобы ax mod(n) = y. Например, 1816 mod(43) = 9. Здесь 16 является дискретным логарифмом 9 с основанием 18 по модулю 43. Можно проверить, что число 3 вообще не имеет логарифма с основанием 5 по модулю 21.

Даже при больших числах x из интервала (1, n) вычисление f(x) = ax mod(n) можно осуществить за 0 [log2 n] операций. Обратная к этой функции – операция вычисления дискретного логарифма x: по данным a и y найти такое целое x, чтобы ax (mod n) = y. До настоящего времени не известно эффективных алгоритмов решения этой задачи. Известно лишь, что сложность вычисления дискретного логарифма x эквивалента сложности разложения целого числа на произведение простых чисел и оценивается как 0[2n], то есть экспоненциальная оценка временной сложности.

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

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

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

Функцией с секретом К называется функция fk: X→ Y, зависящая от параметра К и обладающая тремя свойствами:

1. При любом К существует полиномиальный алгоритм вычисления

значений fk (х);

2. При неизвестном К не существует полиномиального алгоритма инвертирования fk(х);

3. При известном К существует полиномиальный алгоритм инвертирования fk(х).

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

Степенная функция f(x) = y = xm (mod n) достаточно легко, за 0[log2 n ]операций может быть вычислена при известных m и n. В настоящее время вычисление такого x, что y = xm (mod n) при известных y, m, n относится классу трудных задач. Основная идея использования односторонних функций с секретом сводится к следующему.

Получение шифрованного текста С из исходного текста М осуществляется путем использования указанной степенной функции в виде:

С = E(e, n) (M) = Me (mod n),

где e, n – ключ преобразования операции зашифрования.

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

M = D(d, n) (C) = Cd (mod n), где (d, n) – ключ расшифрования.

Оба эти преобразования легко выполнить за 0 [log2 n] операций.

Если теперь ключ (e, n) преобразования зашифрования сделать открытым, а параметр d держать в секрете, то восстановление исходного текста M из зашифрованного текста С даже при известном алгоритме зашифрования потребует решения трудной задачи вычисления функции обратной к функции зашифрования, т.е. вычисления корня степени e по модулю n.

Применение функций с секретом в криптографии позволяет:

1. Организовать обмен шифрованными сообщениями с использованием только открытых каналов связи, т.е. отказаться от секретных каналов связи для предварительного обмена ключами;

2. Включить в задачу вскрытия шифра трудную математическую задачу и тем самым повысить обоснованность стойкости шифра;

3. Решать новые криптографические задачи, отличные от шифрования (цифровая подпись и др.).

 

6.2. Генерация ключей

В 1976 году американцы Уитфилд Диффи и Мартин Хеллман (Diffi W., Hellman M.) в статье " Новые направления в криптографии" предложили новый принцип построения криптосистем, не требующий не только передачи ключа принимающему сообщение, но даже сохранения в тайне метода шифрования. Этот метод получил название “метод экспоненциального ключевого обмена” и является первой криптосистемой с открытым ключом. Метод запатентован, но срок действия патента истек 29 апреля 1997 года. Рассмотрим его основные положения.

Схема открытого распределения ключей предполагает, что все пользователи знают некоторое простое число Р и примитивный элемент a (1 < a < P) конечного поля Галуа GF (p)(примитивный элемент – это такой элемент, степени которого составляют все элементы поля GF (p)). Такие элементы всегда существуют и их число равно φ (p)), где φ - функции Эйлера. Для выработки общей секретной ключевой информации К пользователи А и В должны сделать следующее:

1. Пользователи А и В независимо выбирают случайные числа Ka и Kb из интервала (1, …, р -1), называемые секретными ключами пользователей.

2. Пользователи А и В на основе известных параметров a и р вычисляют величины: yA ≡ aKа (mod p); yB ≡ aKb (mod p), которые являются открытыми ключами пользователей.

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

4. По полученным значениям yA и yB каждый из пользователей независимо вычисляет секретный параметр К, который и будет их общим сеансовым секретным ключом:

A: K = yBKa (mod p) = (aKb)Ka (mod p) = aKbKa (mod p)

B: K = yAKb (mod p) = (aKa)Kb (mod p) = aKaKb (mod p).

Стойкость такой системы зависит от сложности вычисления дискретных логарифмов в мультипликативной группе конечного поля в F(p). Эта стойкость гарантирована тем, что до настоящего времени не найдено быстрых алгоритмов нахождения ключа K из а, yA, yB.

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

В общем виде криптографическая система с открытым ключом представляет собой систему, включающую следующие компоненты:

– пространство открытых текстов M;

– пространство шифротекстов C;

– пространство секретных ключей K;

– множество преобразований зашифрования Еk, k Î K

Еk: m ® c, m Î M, c Î C;

– множество преобразований расшифрования Dk, k Î K

Dk: c ® m, m Î M, c Î C.

При этом преобразования Еk и Dk должны обладать следующими свойствами:

1. Для каждого k Î K преобразование Dk является обратным к преобразованию Еk т.е. Dkk(m) = m при всех m Î M.

2. По каждому выбранному ключу k Î K легко найти пару обратимых преобразований Еk и Dk.

3. Для всех k Î K, m Î M, c Î C величины Еk(m) и Dk(c)

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

4. Почти для всех k Î K вычислительно невозможно из Еk вывести какое - либо легко вычисляемое преобразование, эквивалентное Dk.

Свойство 4 отличает криптосистемы с открытым ключом от традиционных криптосистем с секретным ключом, в которых преобразования Еk и Dk также зависят от секретного ключа К, но знание преобразования Dk дает знание К и Dk или наоборот, знание Dk позволяет определить К и Dk, поэтому преобразования

Ek и Dk либо оба известны, либо оба неизвестны. Это свойство 4 позволяет не засекречивать преобразование зашифрования Ek, а делать его открытым для всех, кто хочет послать секретное сообщение.

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

Пример 45. Пусть абоненты А и В условились организовать секретную переписку между собой используя секретный ключ сгенерированный при помощи алгоритма Диффи–Хеллмана. Тогда они вместе выбирают числа p = 67 и a = 11. Затем

1. А выбирает случайное целое число ka = 47, вычисляет yA = aka mod p = 1147 mod 67 = 2 и посылает В число 2.

2. В выбирает случайное целое число kb = 51 вычисляет yB = akb mod p = 1151 mod 67 = 3 и посылает A число 3.

3. А вычисляет K = yBka mod p = 347 mod 67 = 27

4. B вычисляет K = yAkb mod p = 251 mod 67 = 27

В итоге А и В получили секретный ключ K = 27. ▲

Без дополнительных мер безопасности (введения сертификатов открытых ключей), рассмотренный метод ключевого обмена уязвим с точки зрения атаки, известной под названием “человек посередине” (main in the midlle attact).

Предположим, что злоумышленник C может не только подслушивать сообщения между абонентами A и B, но также изменять, удалять и создавать новые ложные сообщения. Тогда злоумышленник C может выдавать себя за абонента A, передающего (или принимающего) от его имени информацию абоненту B, и за B перед абонентом A. Атака состоит в следующем:

1. A посылает B свой открытый ключ. C перехватывает его и посылает B свой собственный открытый ключ.

2. B посылает A свой открытый ключ. C перехватывает его и посылает A свой собственный открытый ключ. Таким образом, злоумышленник подменяет открытые ключи легальных участников информационного обмена на свои.

3. Когда A посылает зашифрованное сообщение B, C перехватывает его. Так как сообщение зашифровано на открытом ключе C, он расшифровывает его, затем зашифровывает его на открытом ключе B и посылает B.

4. Когда B посылает сообщения A, C перехватывает его. Так как сообщение в зашифровано на открытом ключе C, он расшифровывает его, снова зашифровывает его на открытом ключе A и посылает A.

Атака возможна, даже если открытые ключи A и B хранятся в базе данных (БД). Злоумышленник C может перехватить запрос A к БД и подменить открытый ключ. Данная атака очень эффективна. Открытые ключи должны проходить сертификацию, чтобы предотвратить подобные атаки, связанные с подменой ключей и должны регулярно меняться.

6.3. Асимметричная криптосистема RSA

В 1978 г. Рональд Ривест, Ади Шамир и Леонард Адлеман (R.Rivest, A.Shamir, L.Adleman) предложили пример функции, обладающей рядом замечательных свойств. На ее основе была построена реально используемая система шифрования, получившая название по первым буквам фамилий авторов – система RSA. Рассмотрим ее основные положения на примере криптосистемы с открытым ключом.

Система создана на основе степенной односторонней функции с секретом f(x) = xe mod n. Блок x открытого текста, представленный как целое число в диапазоне [0, n-1], преобразуется в блок y шифротекста с помощью криптографического преобразования:

y = E(e, n)(x) = xe mod n,

где (e, n) – открытый ключ, используемый для зашифрования. При расшифровании блок x открытого текста вычисляется также с помощью степенной функции, но с другим показателем d, являющимся закрытым ключом:

x = D(d, n) (y) = yd mod n.

В основе согласованности этих преобразований лежит теорема Эйлера, в соответствии с которой для каждого числа x, взаимно простого с модулем n, выполнено сравнение xφ (n) ≡ 1 mod n,

где φ (n) – функция Эйлера, равная числу натуральных чисел, не превосходящих n и взаимно простых с n:

φ (n) = n ∙ (1 -1/ p1) ∙ (1 – 1/ p2) ∙...∙ (1 – 1/ ps),

если каноническое ражложение числа n есть p1k1 p2k2 ∙... psks.

Для того чтобы воспользоваться теоремой Эйлера, в криптосистеме RSA используются числа e и d, связанные соотношением

ed ≡ 1 mod φ (n). (6.1)

Тогда при x, взаимно простом с модулем n,

(xe mod n)d mod n = xed mod n = xtφ (n)+1 mod n = x ∙ (1)t = x.

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

Как выбираются числа e, d и n? Вообще, зная φ (n), число e можно выбрать взаимно простым с φ (n), проверив свойство (e, φ (n)) = 1 с помощью алгоритма Евклида. Тогда d есть решение сравнения (6.1), и d можно найти с помощью расширенного алгоритма Евклида, определяющего числа d и t такие, что

e ∙ d + t ∙ φ (n) = 1

В системе RSA модуль n есть произведение двух секретных простых чисел p и q, поэтому φ (n) = (p – 1) ∙ (q – 1). При этом если простое число e > max(p, q), то оно взаимно простое с φ (n), то есть при выработке такого ключа e можно воспользоваться быстрыми тестами проверки чисел на простоту и не применять алгоритм Евклида.

Без знания простых сомножителей p и q трудно определить значение φ (n), следовательно, при секретном числе d определение открытого текста по зашифрованному сообщению сводится либо к трудной задаче извлечения корня степени e из числа y по модулю n, либо к трудной задаче разложения числа n на простые множители.

Условие (x, n) = 1 при больших p и q почти всегда выполняется, так как доля таких чисел x есть

φ (n)/ n = (n – p –q +1)/n > 1 – 1/q – 1/p.

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

1. Числа p и q должны быть достаточно большими, не слишком сильно различаться и быть не слишком близкими;

2. НОД (p –1, q -1) должен быть небольшим, в лучшем случае равен 2;

3. Числа p и q должны быть сильно простыми (простое число r называется сильно простым, если r +1 имеет большой простой делитель, а r -1 имеет большой простой делитель s такой, что s -1 также имеет большой простой делитель.

 

Теоретические положения построения криптографических систем с открытым ключом в основном базируются на следующих фактах:

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

2. Задача вычисление логарифма за полиномиальное время не разрешима.

3. Следствие малой теоремы Ферма: для любого целого числа m, не делящегося на простое число p, имеет место сравнение mp-1 ≡ 1 (mod p).

4. Функции Эйлера, которая гласит, что если натуральное число n делится в точности на k различных простых чисел p1, p2,..., pk, то количество чисел, меньших n и взаимно простых с n, равно

φ (n) = n ∙ (1 – 1/p1) ∙ (1 – 1/p2) ∙... ∙ (1 – 1/pk).

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

А: рA, qA; nА = рA∙ qA; φ (nА); НОД(eA, φ (nА)) = 1; 0 < eA < φ (nА),

B: pB, qB; nB = pB∙ qB; φ (nB); НОД(eB, φ (nB)) = 1; 0 < eB < φ (nB).

Затем печатается справочная книга, доступная всем желающим, которая имеет вид:

Абонент Открытый ключ
A nА, eA
B nB, eB

 

где nА – произведение двух простых чисел, известных только абоненту А, eA – открытый ключ, доступный каждому, кто хочет передать секретное сообщение А;

nB – произведение двух простых чисел, известных только B,

eB – открытый ключ, доступный каждому, кто хочет передать секретное сообщение B.

Каждый из абонентов находит свой секретный ключ из сравнений

eA ∙ dA ≡ 1(mod φ (nА)), 0 < eA < φ (nА),

eB ∙ dB ≡ 1(mod φ (nB)), 0 < eB < φ (nB).

В итоге имеем

Абонент Открытые ключи Секретные ключи
A nА, eA dA
B nB, eB dB

 

Пусть абонент А решает послать сообщение m абоненту В:

А: mВ и пусть 0 < m < nB, иначе текст делят на блоки длины меньше nB. Сначала А зашифровывает сообщение открытым ключом абонента В, который есть в справочной книге, вычисляет:

cA ≡ meB(mod nB), 0 < m < nB,

и отправляет абоненту В. Абонент В, расшифровывает это сообщение своим секретным ключом:

m ≡ cAdB(mod nB), 0 < m < nB,

Пример 46. Пусть абоненты A и B решили обменяться между собой секретными сообщениями с помощью системы RSA.

Абонент A выбрал простые числа рA = 7643 и qA = 8753, их произведение nА=66899179, функцию Эйлера φ (nA) = nA∙ (1-1/рA)∙ (1-1/qA) = 66882784.

Затем он выбирает случайное число eA = 9467 (открытый ключ) и находит секретный ключ из решения сравнения: eA∙ dA ≡ 1(mod φ (nА)) = 9467∙ dA ≡ 1(mod 66882784), 0 < dA < φ (nА), т.е. dA = 30993427.

Абонент B выбрал простые числа pB = 7481 и qB = 9539, их произведение nB = 71361259, функцию Эйлера φ (nB) = nB∙ (1-1/pB)∙ (1-1/qB) = 71344240. Затем он выбирает случайное число eB = 74671 (открытый ключ) и определяет свой секретный ключ из решения сравнения:

eB ∙ dB ≡ 1(mod φ (nB)) = 74671 ∙ dB ≡ 1(mod71344240), 0 < dB < φ (nB), т.е. dB = 33289711.

Таким образом, у абонентов имеются следующие данные:

 

Абонент Открытые ключи Секретные ключи
A 66899179, 9467  
B 71361259, 74671  

 

Абонент A решает послать секретное сообщение m = 95637 абоненту B. Тогда он шифрует сообщение открытым ключом абонента B:

c1 ≡ meB(mod nB)= 9563774671(mod 71361259) = 25963634.

Абонент B, получив это сообщение, расшифровывает его своим секретным ключом: m ≡ c1dB(mod nB)= 2596363433289711(mod 71361259)= 95637. ▲

 

6.4 Надежность системы RSA

В рассмотренной криптосистеме с открытым ключом для расшифрования сообщения m необходимо найти секретный ключ dB. Это возможно в двух случаях:

1) если известно разложение nB на простые множители;

2) если известен модуль φ (nB) сравнения eBdB ≡ 1(mod φ (nB)).

Но так как nB = pB∙ qB, то

φ (nB) = φ (pB) ∙ φ (qB) = (pB -1) ∙ (qB -1) = pB ∙ qB - (pB+qB) + 1 и

(pB –qB)2 = pB2 + qB2 – 2pB∙ qB = (pB + qB)2 – 4pB∙ qB.

Следовательно, мы имеем равенства:

φ (nB) = nB - (pB + qB) + 1,

(pB – qB)2 = (pB + qB)2 – 4pB∙ qB,

а значит, зная φ (nB), можно решить эту систему и найти pB и qB, а зная pB и qB, легко вычислить φ (nB). Таким образом, оба подхода определения ключа dB эквивалентны, т.е. задачи одной сложности. Таким образом, встает задача разложения на простые множители натурального числа.

В теории чисел, несмотря на ее многолетнюю историю и на очень интенсивные поиски в течение последних 30 лет, эффективный алгоритм разложения натуральных чисел на множители так и не найден. Конечно, можно, перебирая все простые числа до (nB)1/2, и деля на них nB, найти требуемое разложение. Но учитывая, что количество простых чисел в этом промежутке асимптотически равно 2∙ (nB)1/2 ∙ (ln nB)-1, находим, что при nB, записываемом 1000 десятичными цифрами, найдется не менее 10497 простых чисел, на которые придется делить nB при разложении его на множители, что при современных возможностях вычислительной техники затянется на долгие годы.

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

Необходимо также отметить, что система RSA обладает мультипликативным свойством. Поясним сказанное. Пусть m1 и m2 – 2 различных открытых текста, а c1 и с2 – соответствующие им шифртексты. Заметим, что (m1 ∙ m2)e = m1e ∙ m2e = c1 ∙ c2 (mod n).

Другими словами, шифртекст открытого текста m = m1 ∙ m2 есть c = c1 ∙ c2(mod n). Это свойство, называемое также гомоморфным свойством RSA, позволяет осуществить атаку по выбранному шифртексту. Его нужно учитывать при совмещении схем шифрования на основе RSA и цифровой подписи RSA.

Кроме того, известно еще несколько атак на RSA. Рассмотрим из них две.

Первая из них называется ”Метод безключевого чтения RSA”. Суть заключается в следующем.

Криптоаналитику известны открытый ключ (e, n) и шифротекст c.

Тогда он подбирает такое число k, для которого выполняется следующее

соотношение: cek(mod n) = c. Т.е. криптоаналитик просто проводит k раз

зашифрование на открытом ключе перехваченного шифротекста. Это выглядит следующим образом: (((ce)e)e…)e = cek = cφ (n)-1 = c(mod n). Найдя такое k, криптоаналитик вычисляет ck = mek = mφ (n)-1 = m (mod n), т.е. получает открытый текст m.

Следующая атака осуществляется на базе общего модуля. Основные предпосылки для ее осуществления заключаются в следующем.

При реализации RSA можно раздать всем абонентам криптосети одинаковый модуль n, но каждому свои значения ei (открытый ключ) и di (секретный ключ). При этом наиболее очевидная проблема заключается в том, что если одно и то же сообщение когда-нибудь шифровалось разными ei и ek, причем НОД(ei, ek) = 1 (как обычно и бывает), то открытый текст может быть расшифрован даже при неизвестных di и dk.

Таким образом, пусть заданы: m – сообщение, а и b – два открытых ключа шифрования, n – модуль. Тогда щифротекстами являются c1 = mа (mod n) и c2 = mb (mod n). Криптоаналитику известны: n, а, b, c1 и c2. Так как а и b взаимно простые числа, то можно найти такие целые числа x и y, что аx + by =1. Тогда, возведя c1 в степень x, а c2 – в степень y, получим:

c1x c2y = (mа)x (mb)y = mаx+by = m1 = m.

Пример 43. Пусть абонент А хочет послать сообщение m = 237135 абоненту В. Абоненту А даны n = 399799 и открытый ключ a = 4397. Он зашифровывает сообщение открытым ключом c1= 2371354397 ≡ 268100(mod 399799) и посылает это число в открытый канал связи. Абонент В хочет также послать сообщение m = 237135 другому абоненту. Для В даны n = 399799 и открытый ключ b = 7517. Он зашифровывает сообщение открытым ключом, т.е. c2=2371357517 ≡ 263851(mod 399799) и также посылает это число в открытый канал связи. Таким образом, криптоаналитику известно: зашифрованные сообщения c1 и c2, модуль n, открытые ключи a и b. Далее криптоаналитик решает уравнение аx + by = 1 = 4397x +7517y и получает x=− 1607 и y=940. Затем он возводит c1 в степень |x|, т.е.

c1|x| = d1 = 2681001607 ≡ 12105(mod 399799), а c2 в степень |y|, т.е.

c2|y| = d2 = 263851940 ≡ 362154(mod 399799).

Так как x < 0, то находится (d1)-1 = 12105-1 ≡ 39501(mod 399799). (При y < 0 искали бы (d2)-1). Далее, перемножая

(d1)-1*d2 ≡ 39501*362154(mod 399799) = 237135 = m, т.е. получили открытый текст. ▲

 

6.5. Проблемы практической реализации RSA

В настоящее время алгорит






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.