Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основные математические принципы в реализации некоторых алгоритмов информационной безопасности. Учебное пособие
.pdf
и она способна проверять четыре простых числа в минуту, то ей, чтобы
отыскать р
и qB, потребуется 500 минут, или свыше 8 часов. Другими
B
словами, Ева сможет раскрыть секретный ключ Боба и тем самым
расшифровать перехваченное сообщение менее чем за день.
Это не слишком-то высокий уровень стойкости, но Боб мог бы выбрать гораздо бо´ льшие простые числа и повысить стойкость своего
секретного ключа. Например, он мог
бы выбрать простые числа, состоящие из 1065 цифр (это означает единицу с 65 нулями, или сто
тысяч миллионов миллионов миллионов миллионов миллионов миллионов миллионов миллионов миллионов миллионов). В результате
величина N будет приблизительно составлять 1065 × 1065, т. е.
10 130 цифр. Компьютер смог бы перемножить оба простых числа и
вычислить N всего лишь за
секунду, но если Ева захочет выполнить
обратную операцию и определить р и q, на это потребуется не в пример больше времени. Насколько больше, зависит от быстродействия
компьютера Евы. По оценке эксперта по безопасности Симеона Гарфинкеля, 100-MHz компьютеру Intel Pentium с 8 MB RAM, чтобы разложить на множители число, состоящее из 10 130 цифр, потребуется
около 50 лет
. Криптографы проявляют тенденцию к параноидальности
и учитывают при определении стойкости своих шифров наихудшие
ситуации, как, например, глобальная секретность. Поэтому Гарфинкель рассматривал, что произойдет, если объединить вместе сотню
миллионов персональных компьютеров (количество компьютеров,
проданных в 1995 году). В результате он получил, что число, состоящее из 10 130 цифр, может быть разложено на
множители примерно за
15 секунд. Так что в настоящее время общепринято, что для обеспечения подлинной стойкости необходимо использовать еще бо´ льшие простые числа. Для ответственных банковских операций N стремятся сделать как минимум 10 308, которое в десять миллионов миллиардов
миллиардов миллиардов миллиардов миллиардов миллиардов миллиардов миллиардов миллиардов миллиардов миллиардов
миллиардов
миллиардов миллиардов миллиардов миллиардов миллиардов миллиардов миллиардов раз больше, чем 10 130. Объединенными усилиями
сотне миллионов персональных компьютеров потребуется затратить
более тысячи лет, чтобы раскрыть такой шифр. При достаточно
бо´льших значениях р и q RSA является неуязвимой.
91

Таким образом, алгоритм RSA выглядит следующим образом.
А
р
р
А
р
1. Пусть в системе абоненты А (Алиса), В (Боб) и т. д. Каждый день
абонент выбирает случайно два больших простых числа вида:
qN
АА
qN
BB B
;
.
2. Каждый день абонент вычисляет функцию Эйлера:
() ()1( 1) ,
р qN
()(11)()
BB B
и некоторое число
NN и по обобщенному алгоритму Евклида находит чис-
А B
),() (
XN N взаимно простое число с
АА
qN
,()()
А B
ло Y такое, что
XY mod φ = 1.
В результате получаем следующую табл. 5.5.
Таблица 5.5
Ключи пользователей в системе RSA
Абонент Секретный ключ Открытый ключ
A
B
XA
X
, NA
Y
A
B
Y
, NB
B
Криптопротокол RSA
1. Алиса шифрует сообщение по формуле
YB
em N
mod
B
и, используя открытые параметры Боба, пересылает e по открытой линии.
2. Боб, получивший зашифрованное сообщение, вычисляет
ХB
me N
mod .
92
B

Утверждение. Для описанного протокола ,mm
А
р
А
N
A
A
А
N
A
т. е. Алиса по-
лучает исходящее сообщение от Боба.
Пример 1 (со стороны А – Алисы)
Пусть в системе абоненты А (Алиса), В (Боб) и т. д. Каждый день
абонент выбирает случайно два больших простых числа вида
qN
АА
Для простоты предположим, что Алиса выбрала числа
11.
q
Она должна хранить эти числа в секрете.
А
Алиса перемножает их и получает число
187.
N
А
Теперь она выбирает еще одно число, формируя
Y
()()11
р q
и
АА
должны быть взаимно простыми.
Алиса может теперь опубликовать
.
17,
р
А
.
В нашем случае
7.
Y
Y
и
.АN
Поскольку эти два
A
числа необходимы для зашифровывания, они должны быть доступны
всем, кто захочет зашифровать сообщение для Алисы. Вместе эти числа называются открытым ключом.
Перед тем как приступить к зашифровыванию сообщения, оно
должно быть вначале преобразовано в число m. Например, слово заменяется на двоичные цифры ASCII-кода, а эти
двоичные цифры могут
рассматриваться как десятичное число. После этого m зашифровывается, образуя шифртекст e, по формуле
Y
mod .
em N
Примем m = 88.
Чтобы зашифровать это сообщение, Боб начинает разыскивать от-
крытый ключ Алисы и находит, что
= 187, а
Y
= 7. Это дает ему
формулу шифрования, необходимую, чтобы зашифровывать сообщения для Алисы. При m = 88 формула имеет вид
7
88 mod 1().87e
Вычислим последовательно:
1
mod 187 = 88;
88
2
88
mod 187 = 7744 = 77;
93

884 mod 187 = 882 882 = 77 77 =5929 = 132;
A
X
A
X
7
mod 187 = 884 882 88 =132 77 88 = 11.
88
Теперь Боб отправляет Алисе зашифрованный текст: e = 11.
Алиса, однако, способна расшифровать его, поскольку у нее есть
определенная специальная информация: ей известны значения р и q.
Она вычисляет особое число
известный как ее секретный ключ. Число
– ключ для расшифровывания, иначе
рассчитывается по сле-
дующей формуле:
mod 1,
XY
AA
mod 1()()1 1.
XY р q
AA АА
Рассчитаем:
7 mod 17 1()(1,)11 1
X
A
X
A
(7 mod 1.)160
Для вычисления возможно использовать обобщенный алгоритм
Евклида (п. 2.3 «Наибольший общий делитель»).
1
Вычислим
7mod160:
U
V
T
160 0
71
6 –22 Q = 22
123 Q = 1
0 –160 Q = 6
1
Получаем
23.
X
A
Ответ:
7 mod 160 23.
Действительно 7 23 mod 160 = 1.
Чтобы расшифровать сообщение, Алиса просто воспользуется сле-
дующей формулой:
ХА
me N
mod 11 mod 187 .()
23
94

Вычислим последовательно:
1
11
mod 187 = 11;
2
mod 187 = 121;
11
3
11
mod 187 = 112 111 = 121 11 =1331 = 22;
4
mod 187 = 113 11 = 242 = 55;
11
16
mod 187 = 154;
11
m
= 88 = Х в виде ASCII-кода.
Пример 2 (со стороны В – Боба)
1. Допустим, Алиса хочет передать сообщение Бобу m = 15. Боб
выбирает случайно два больших простых числа вида:
3; 11; 3 11 33.
р qN
BB B
2. Вычислим функцию Эйлера:
()()()1 1 (3 1)(11 1) 20.
р qN
BB B
3. Пусть Боб выбрал число
XN
B
,(2)(7)0( )
взаимно про-
стое число с 20, и по обобщенному алгоритму Евклида формируем
число Y такое, что
7 mod 1.Y
Y = 3.
В результате получаем следующую табл. 5.6.
Таблица 5.6
Ключи пользователей в системе RSA
Абонент Секретный ключ Открытый ключ
A
B
X
XA
= 7
B
95
Y
, NA
A
= 3; NB = 33
Y
B

Криптопротокол
1. Алиса шифрует сообщение по формуле
YB
em N
mod 15 mod 33 9
3
B
и, используя открытые параметры Боба, пересылает e = 9 по открытой
линии.
2. Боб, получивший зашифрованное сообщение, вычисляет
CB
me N
mod 9 mod 33 9.
7
B
Вычислим последовательно:
1
mod 33 = 9;
9
2
9
mod 33 = 15;
3
mod 33 = 9 15 = 3;
9
6
mod 33 = 9;
9
7
mod 33 = 9 9 = 15.
9
Таким образом, Боб расшифровал сообщение Алисы.
Единственное предупреждение относительно надежности использования алгоритма RSA шифрования с открытым ключом – это то, что
в будущем кто-нибудь сможет найти способ быстро находить множители N. Возможно, через десять лет или даже завтра кто-то откроет
способ быстрого разложения на множители, после чего RSA
станет
бесполезным. Однако свыше двух тысяч лет математики пытались и не
смогли его отыскать, и на сегодняшний момент для разложения на
множители требуется огромное количество времени.
Огромным преимуществом алгоритма RSA шифрования с открытым ключом является то, что он избавляет от всех проблем, связанных
с традиционными шифрами и обменом ключами. Алисе больше
не
надо волноваться о безопасности доставки ключа Бобу или что Ева
сможет перехватить ключ. Более того, Алиса даже не беспокоится, кто
увидит открытый ключ – чем больше, тем лучше, – так как открытый
ключ помогает только при зашифровывании, а не при расшифровывании. Единственно, что следует хранить в секрете, – это секретный
ключ,
применяющийся для расшифровывания, и Алиса может всегда
держать его при себе.
96

Программная реализация криптопротокола RSA может выглядеть
следующим образом:
class RSAClient
{
public:
int N = 0;
int d = 0;
string name;
vector<int> simple(int n);
int getRandomNumber(int min, int max);
void send(int msg, RSAClient& client);
void recieve(int msg);
RSAClient(string name);
private:
int P = 0;
int Q = 0;
int fi = 0;
int c = 0;
vector<int> simpleNumbers;
};
vector<int> RSAClient::simple(int n)
int RSAClient::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);
}
void RSAClient::send(int msg, RSAClient& client)
{
long int e = power(msg, client.d, client.N);
client.recieve(e);
cout << this->name << " sent message: " << msg << endl;
}
void RSAClient::recieve(int msg)
{
int m_ = power(msg, this->c, this->N);
cout << this->name << " get message: " << m_ << endl;
}
RSAClient::RSAClient(string name)
97

{
Х
this->name = name;
this->simpleNumbers = this->simple(100);
this->P = this->getRandomNumber(0, static_cast<int>(this>simpleNumbers.size()) - 1);
do {
this->Q = this->getRandomNumber(0, static_cast<int>(this>simpleNumbers.size()) - 1);
} while (this->Q == this->P);
this->P = this->simpleNumbers[this->P];
this->Q = this->simpleNumbers[this->Q];
this->N = this->P * this->Q;
this->fi = (this->P - 1) * (this->Q - 1);
for (size_t i = 0; i < static_cast<int>(this->simpleNumbers.size()); i++) {
if (this->simpleNumbers[i] > fi) {
this->d = this->simpleNumbers[i - 1];
break;
}
}
if (this->d == 0) {
this->d = this->simpleNumbers[this->getRandomNumber(0,
static_cast<int>(this->simpleNumbers.size()) - 1)];
}
this->c = 0;
while (this->c * (this->d % this->fi) % this->fi!= 1) {
this->c++;
}
}
Криптопротокол 5.3.9. Криптопротокол Хьюза (Hughes)
1. Прежде всего выбираются случайные числа g и p, причем p простое, и разные степени числа g могут представить различные числа по
модулю p. Числа g и p передаются пользователям в открытом виде (доступно для всех абонентов сети).
2. Абоненты-отправители (например, А – Алиса) выбирают закрытые (секретные) ключи
x
Kg p
mod .
Хi таким образом, что
98
11
p
i
и генерирует

3. Абонент-получатель (например, В – Боб) выбирает случайное
X
A
A
большое число Y, взаимно простое с (p – 1), и посылает абоненту-
отправителю число K:
Y
Kg p
mod .
4. Абонент А посылает Бобу:
x
mod .
Yp
5. Боб вычисляет значения:
1
)mo (d1zy p
и
KX p
z
mod .
6. Алиса и Боб обмениваются секретными сообщениями с ключом
.KK
Криптопротокол 5.3.10. Криптопротокол Шамира (Shamir)
Этот шифр, предложенный Шамиром (Adi Shamir), был первым,
позволяющим организовать обмен секретными сообщениями по открытой линии связи для лиц, которые не имеют никаких защищенных
каналов и секретных ключей и, возможно, никогда не видели друг друга. Перейдем к описанию системы. Пусть есть два абонента А и В, соединенных линией связи.
А хочет передать сообщение m абоненту
В так, чтобы никто не узнал его содержания. А выбирает случайное большое число p и открыто передает его В. Затем А выбирает два числа
d
и
такие, что
mod ( – 1) 1.
cd р
AA
c
Эти числа А держит в секрете и передавать не будет. В тоже выби-
с
рает два числа
d
и
B
такие, что
B
cd р
BB
mod( – 1) 1
и держит их в секрете.
После этого А передает свое сообщение m, используя трехступенчатый протокол. Если m < р (m рассматривается как число), то сооб-
щение m передается сразу, если
mр , то сообщение представляется
99

, ,..., ,
р
A
x
х
х
х
x
р
х
x
х
A
в виде
тельно
mm m
12
, , ..., .
mm m
12
t
t
где все
При этом для кодирования каждого mi лучше вы-
бирать случайно новые пары
()
m
i
cd
,
и затем передаются последова-
()
cd
и
A
– в противном случае
BB
надежность системы понижается. В настоящее время такой шифр, как
правило, используется для передачи чисел, например секретных ключей, значения которых меньше р. Таким образом, мы будем рассматривать только случай m < р.
Криптопротокол Шамира
1. А вычисляет число
СA
mod ,
mp
1
к В.
1
где m – исходное сообщение, и пересылает
2. В, получив
и передает
2
, вычисляет число
1
к A.
CB
хр
21
mod
3. А вычисляет число
dA
xx
32
mod
и передает его В.
4. В, получив
, вычисляет число
3
xp
43
dB
mod .
Свойства протокола Шамира
m
1)
, т. е. в результате реализации протокола от А к В дей-
4
ствительно передается исходное сообщение;
2) злоумышленник не может узнать, какое сообщение было пере-
дано.
Приведем
пример.
1. Допустим, Алиса хочет передать сообщение Бобу m = 10.
2. Алиса выбирает простое число вида p = 23 и взаимно простое
с p число
c
= 7.
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
