Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основные математические принципы в реализации некоторых алгоритмов информационной безопасности. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Таблица 5.2
A
Х
Х
B
Y
Y
B
р
A
Х
р
A
A
A
Z
Ключи пользователей в системе Диффи–Хеллмана
Абонент Секретный ключ Открытый ключ
B
A
A
Допустим, абонент А решил организовать сеанс связи с В, при этом обоим абонентам доступна открытая информация из табл. 5.2. Абонент А сообщает В по открытому каналу, что он хочет передать ему сообще­ние. Затем абонент А вычисляет величину
XA
ZY
(mod)
AB B
(никто другой кроме А этого сделать не может, так как число
сек-
ретно). В свою очередь, абонент В вычисляет число
Утверждение.
ZY
BA A
ZZ
BBA
.
XB
.() mod
Отметим главные свойства системы:
1) абоненты А и В получили одно и то же число
ZZ Z
BBA
,
которое не передавалось по открытой линии связи;
2) злоумышленник не знает секретных чисел, поэтому не может
вычислить число Z.
Абоненты А и В могут использовать
в качестве секретного
B
ключа для шифрования и дешифрования данных. Таким же образом любая пара абонентов может вычислить секретный ключ, известный только им.
Остановимся теперь на упомянутой выше задаче выбора числа g. При произвольно заданном р она может оказаться трудной задачей, связанной с разложением на простые множители числа р – 1.
Дело в
том, что для обеспечения высокой стойкости рассмотренной системы число р – 1 должно обязательно содержать большой простой множитель.
Поэтому часто рекомендуют использовать следующий подход.
Простое число р выбирается таким, чтобы выполнялось равенство
81
2,
p
gp
X
X
A
ql
где q – также простое число. Тогда в качестве g можно взять любое число, для которого справедливы неравенства
q
mod 1.
 и
11
gp
Алгоритм Диффи–Хеллмана выглядит следующим образом.
1. Алиса и Боб вместе выбирают большое простое число p и число
g так, чтобы g было примитивным корнем по модулю p.
2. Алиса выбирает случайное большое целое число Х
X
A
Бобу
Yg p
A
mod
.
3. Боб выбирает случайное большое целое число Х
X
B
Yg p
Алисе
B
4. Алиса вычисляет значение
5. Боб вычисляет значение
mod
.
A
()
ZY
AB B
ZY
BA A
()
B
mod р.
mod р.
и посылает
A
и посылает
B
6. Алиса и Боб обмениваются секретными сообщениями с ключом
ZZ Z
BBA
.
С позиций программирования возможна элементарная реализация алгоритма с использованием принципов объектно-ориентированного программирования:
class DHClient { public:
int Y = 0; int p = 0; int g = 0; string name = ""; int getRandomNumber(int min, int max);
void createKey(DHClient client); DHClient(int p, int g, const string& name); private:
int X = 0;
int Key = 0; };
int DHClient::getRandomNumber(int min, int max) {
double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
82
return static_cast<int>(rand() * fraction * (max - min + 1) + min);
A
Х
Х
} void DHClient::createKey(DHClient client) {
this->Key = power(client.Y, this->X, this->p); }
Рассмотрим численный пример реализации алгоритма Диффи–
Хеллмана.
Пусть строится система связи для абонентов А (Алиса), В (Боб). Для организации этой системы выберем простое число р = 23 и не­которое число g = 5. Нетрудно проверить, что все числа из множества
{1, 2, …, 22} могут быть представлены как различные степени 5 mod 23.
Абоненты Алиса и Боб выбирают большие
числа
= 9,
= 17.
B
Рассчитаем открытые ключи:
X
Yg p
A
 
Yg p
B
A


mod 5 mod 23;
X
B
mod 5 mod 23.
9
17
Вычисление остатка по модулю целесообразно провести итераци­онно.
Для абонента А:
1
5
mod 23 = 5;
2
mod 23 = 25 mod 23 = 2;
5
3
5
mod 23 = 2 5 = 10;
…..
9
mod 23 = 11.
5
Аналогично для абонента В:
1
5
mod 23 = 5;
2
5
mod 23 = 25 mod 23 = 2;
3
mod 23 = 2 5 = 10;
5
83
54mod 23 = 10 5 = 4;
…..
17
mod 23 = 15.
5
В результате получаем следующую табл. 5.3.
Таблица 5.3
Ключи пользователей в системе Диффи–Хеллмана
Абонент Секретный ключ Открытый ключ
A B
ХA = 9
= 17
Х
B
Y
Y
B
=11
A
= 15
Абонент А сообщает В по открытому каналу, что он хочет передать ему сообщение. Затем абонент А вычисляет величину
XA
ZY р
AB B
mod (15) mod 23 ?()
9

15 mod 23 = 15;
2
mod 23 = 18 = –4;
15
3
15
mod 23 = –60 = 17;
…..
9
15
mod 23 = 14.
В свою очередь, абонент В вычисляет число
XB
( ) mod (11) mod 23 ?
ZY р
BA A
17

11 mod 23 = 11;
2
11
mod 23 = 6;
3
11
mod 23 = 11 6 = 66 = 43 = 20 = –3;
…..
17
mod 23 = 14.
11
Далее Алиса и Боб обмениваются секретными сообщениями с клю-
ZZ
чом
AB BA
14.
84
ElGamal)
Х
Алгоритм Эль-Гамаля является развитием алгоритма Диффи– Хеллмана, он был разработан в 1985 году Тахером Эль-Гамалем [Johnson, Menezes, Vanstone]. В результате Эль-Гамаль получил два алгоритма: один для ЭЦП (для обеспечения аутентификации) и второй для шифрования. Алгоритм шифрования Эль-Гамаля, использованный для тестирования, работает следующим образом.
1. Прежде всего выбираются случайные числа g
и p, причем p про­стое, и разные степени числа g могут представить различные числа по модулю p. Числа g и p передаются пользователям в открытом виде (до­ступно для всех абонентов сети).
2. Каждый абонент А, B, C и т. д. выбирает закрытый (секретный)
11.
Х p
ключ
таким образом, что
i
3. Каждый абонент А, B, C и т. д. вычисляет открытый ключ Y
Yg p

i
Хi
i
mod .
:
i
В результате получаем следующую табл. 5.4.
Таблица 5.4
Ключи пользователей в системе Эль-Гамаля
Абонент Секретный ключ Открытый ключ
A B
…
ХA Х
…
Y
A
B
Y
…
B
4. Первый пользователь (осуществляющий шифрование – по умол­чанию А – Алиса) выбирает число k, взаимно простое с p – 1, и вычис­ляет пару (r, e):
k
mod ,
rg p
emY p
B
k
mod .
5. Число k держится в секрете. Пара чисел (r, е), являющаяся шиф­ротекстом, передается второму пользователю.
85
6. Второй пользователь, получив (r, e), для расшифровывания со-
общения вычисляет:
1
pXB

mod .
mer p

Утверждение (свойство шифра Эль-Гамаля)
1. Абонент В получил сообщение, т. е. .mm
2. Злоумышленник, зная параметры системы p, g,
,BY
r и e, не
сможет вычислить m.
Утверждение верно с позиций определения односторонней функ­ции и ввиду того, что вычисление k в равенстве является задачей сложной, требующей привлечения массы вычислительных ресурсов
610
10 10 лет работы мощного суперкомпьютера.
С позиций программирования возможна элементарная реализация алгоритма с использованием принципов объектно-ориентированного программирования:
struct Message {
int r = 0;
int e = 0; }; class ElClient { public:
int g = 0;
int p = 0;
int d = 0;
string name = "";
void computeKCD();
void recieve(Message message);
void send(int msg, ElClient& client);
int getRandomNumber(int min, int max); ElClient(int p, int g, string n); private:
int k = 0;
int c = 0; }; void ElClient::computeKCD() {
this->k = this->getRandomNumber(2, this->p - 2);
this->c = this->getRandomNumber(2, this->p - 1);
86
this->d = power(this->g, this->c, this->p); } void ElClient::recieve(Message message) {
int _m = (message.e * power(message.r, this->p - 1 - this->c, this->p)) % this->p; } void ElClient::send(int msg, ElClient& client) {
Message message; message.e = (msg * power(client.d, this->k, this->p)) % this->p; message.r = power(this->g, this->k, this->p); client.recieve(message); } int ElClient::getRandomNumber(int min, int max) {
double fraction = 1.0 / (static_cast<double>(RAND_MAX) + 1.0);
return static_cast<int>(rand() * fraction * (max - min + 1) + min); }
Рассмотрим численный пример реализации алгоритма Эль-Гамаля.
1. Прежде всего выберем случайные числа g = 5 и p = 23. Числа g и
p передаются пользователям в открытом виде (доступно для всех або­нентов сети).
2. Выберем закрытый ключ для абонента В: Х
= 19.
В
3. Вычислим открытый ключ для абонента В:
ХA
Yg p
В
mod 5 mod 23;
19
5 mod 23 = 5;
2
5
mod 23 = 2;
…..
19
5
mod 23 = 7.
7.
Значит,
Y
В
4. Первый пользователь (осуществляющий шифрование – по умол­чанию А – Алиса) выбирает число k = 7, взаимно простое с p – 1, и вы­числяет пару (r, e):
7
5 mod 23 17,r 
7
15 7 mod 23.e 
87
Рассчитаем без использования компьютера (на основании теоремы
об остатках):
1
mod 23 = 7;
7
2
mod 23 = 3;
7
4
7
mod 23 = 9;
7
mod 23 =7 3 9 = 5.
7 e = 15 5
mod 23 = 6.
5. Число k = 7 держится в секрете. Пара чисел (17, 6), являющаяся шифротекстом, передается второму пользователю.
6. Второй пользователь, получив (r, e), для расшифровывания со- общения вычисляет:
23 1 19


6 17 mod 23 15.m
Значит, Боб смог расшифровать сообщение Алисы.
Криптопротокол 5.3.8. RSA
Названный в честь его разработчиков Риверста (Ron Rivest), Ша­мира (Adi Shamir) и Адлемана (Leonard Adleman), шифр RSA до сих пор является одним из самых широко используемых в мире.
Об RSA впервые было объявлено в августе 1977 года, когда Мар­тин Гарднер написал статью, озаглавленную «Новый вид шифра, для взлома которого потребуются миллионы лет», для колонки «Матема­тические игры»
в «Сайентифик Америкен». Объяснив, как происходит шифрование с открытым ключом, Гарднер задал задачу своим читате­лям. Он напечатал зашифрованное сообщение и дал открытый ключ, который использовал для его зашифровывания:
N = 114 381 625 757 888 867 669 235 779 976 146 612 010 218 296 721 242 362 562 561 842 935 706 935 245 733 897 830 597 123 563 958 705 058 989 075 147 599 290 026 879 543 541.
Задача заключалась в том, чтобы разложить на сомножители р и q, а затем использовать эти числа, чтобы расшифровать сообщение.
При­зом были 100 долларов. У Гарднера не было места, чтобы объяснить все подробности алгоритма RSA; вместо этого он попросил читателей написать в лабораторию вычислительной техники Массачусетского технологического института, откуда им пришлют технический мемо-
88
рандум, который был как раз к тому времени подготовлен. Ривест, Шамир и Адлеман были поражены, получив три тысячи запросов. Од­нако ответили они не сразу, так как были обеспокоены, что открытое распространение их идеи могло бы поставить под угрозу получение патента. Когда же вопросы по выдаче патента были в конце концов разрешены, троица устроила праздничную вечеринку, на которой пре­подаватели и студенты уплетали пиццу, запивая ее пивом, и одновре­менно раскладывали по конвертам технические меморандумы для чи­тателей «Сайентифик Америкен».
Что касается задачи Гарднера, то для ее решения потребовалось 17 лет. 26 апреля 1994 года команда из шестисот добровольцев сооб­щила о том, какие
сомножители были у N:
q = 3 490 529 510 847 650 949 147 849 619 903 898 133 417 764 638
493 387 843 990 820 577;
р = 32 769 132 993 266 709 549 961 988 190 834 461 413 177 642 967 992 942 539 798 288 533.
Используя эти значения в качестве секретного ключа, они смогли расшифровать сообщение. Сообщение состояло из ряда чисел, но, пре­образованное в буквы, гласило: «The magic words are squeamish ossifrage» («Волшебные слова: брезгливая скопа»). Задача разложения на множители была распределена между добровольцами, проживаю­щими в Австралии, Англии, США и Венесуэле. Они использовали сво­бодное время своих рабочих станций, больших ЭВМ и суперкомпью­теров; при этом каждый занимался только частью задачи. По сути, чтобы решить задачу Гарднера, компьютеры, разбросанные по всему миру, объединялись в сеть и работали одновременно. Даже принимая во внимание огромную работу, которая велась параллельно, некоторые читатели могут удивиться, что RSA была взломана за такое короткое время, но следует заметить, что в задаче Гарднера использовалось от­носительно малое значение N; оно составляло порядка 10129. Сегодня, чтобы обеспечить безопасность жизненно важной информации,
поль­зователи RSA могут брать гораздо бо´льшие значения. Ныне – вполне обычное дело зашифровывать сообщение с использованием такого большого N, что всем компьютерам в мире, чтобы взломать шифр, по­требуется время, превышающее возраст Вселенной.
89
Считается, что данная система асимметричной криптографии, из­вестная как RSA, является одним из видов шифрования с открытым ключом. Чтобы понять, насколько надежна RSA, мы можем проверить ее с точки зрения Евы и попробовать прочесть сообщение, посланное Алисой Бобу. Для того чтобы зашифровать сообщение для Боба, Алиса должна отыскать его открытый ключ. Для создания
ключа Боб берет выбранные им самим простые числа, р множает их, получая N
. Он хранит рB и qB в секрете, ибо они состав-
B
своего открытого
и qB, и пере-
B
ляют его секретный ключ для дешифровывания, но при этом публику­ет N
, которое равно 408 508 091. Так что Алиса подставляет открытый
v
ключ Боба N
в общую одностороннюю функцию шифрования, а затем
B
зашифровывает свое сообщение ему. Когда приходит зашифрованное сообщение, Боб может обратить функцию и расшифровать его, ис-
пользуя значения р
и qB, которые составляют его секретный ключ.
B
Между тем Ева сумела во время передачи сообщения перехватить его. Ее единственная надежда расшифровать сообщение – обратить одно­стороннюю функцию, а это возможно только в том случае, если она
знает р Еве известно N ния р
и qB. Боб держит рv и qv в секрете, но, как и всем остальным,
B
, равное 408 508 091. Далее Ева пытается найти значе-
B
и qB путем подбора чисел, которые при перемножении дают
B
408 508 091 – процесс, известный как разложение на множители.
Операция разложения на множители отнимает очень много време­ни, но сколько же на самом деле понадобится Еве времени, чтобы найти сомножители числа 408 508 091? Существуют различные спосо­бы разложения на множители числа NB. Хотя одни из них быстрее,
другие – медленнее, но, по сути, во всех них проверяется, делится ли
а
N
без остатка на каждое из простых чисел. Например, 3 – это простое
B
число, но оно не является множителем числа 408 508 091, так как 408 508 091 нацело на 3 не делится. Поэтому Ева берет следующее
простое число – 5. 5 точно так же не является множителем, поэтому Ева переходит к следующему простому числу и так далее. В конце концов Ева добирается
до числа 18 313, 2000-го простого числа, кото-
рое является множителем числа 408 508 091. Найдя один из сомножи-
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]