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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
и она способна проверять четыре простых числа в минуту, то ей, чтобы отыскать р
и 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]