Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основные математические принципы в реализации некоторых алгоритмов информационной безопасности. Учебное пособие
.pdf
Вычислим dA такое, что
х
х
х
mod ( – 1) 1,
cd р
AA
7 mod(23–1)1,
d
A
19.
d
A
3. Боб выбирает для простого числа p = 23 и взаимно простое
c
с p число
Вычислим d
= 5.
B
такое, что
B
mod ( – 1) 1,
cd р
BB
5 mod (23 – 1) 1,
d
B
9.
d
B
Криптопротокол Шамира
1) Алиса вычисляет число
СA
xm p
1
и пересылает
1
mod 10 mod 23 14.
Вычислим последовательно:
10 = 10 mod 23;
2
= 100 mod 23 = 8;
10
4
= 64 mod 23 = 18;
10
4
7
= 102 10
10
2) Боб, получив
1
10
mod 23 = 8 18 10 mod 23 = 14.
14x
, вычисляет число
1
CB
хх р
21
mod 14 mod 23 15.
Вычислим последовательно:
14 = 14 mod 23;
2
= 196 mod 23 = 12;
14
3
= 14 12 mod 23 = 7;
14
5
= 142 143 mod 23=12 7 mod 23 = 15.
14
101
Бобу:
1
7
5
и передает Алисе:
2

3) Алиса вычисляет число
х
х
х
dA
xx р
32
и пересылает
3
mod 15 mod 23 1 9.
19
Вычислим последовательно:
15 = 15 mod 23;
2
= 15 15 mod 23 = 18 = –5;
15
4
= (–5) (–5) mod 23 = 2;
15
16
= (154)4 mod 23=16;
15
19
= 1516 152 15 mod 23 = 16 (–5) 15 = 19.
15
Бобу:
3
4) Боб, получив
19x
, вычисляет число
3
dB
хх р
43
mod 19 mod 23 10.
9
:
4
Вычислим последовательно:
19 = 19 mod 23;
2
= 19 19 mod 23 = 16;
19
3
= 16 19 mod 23 = 5;
19
6
= 5 5 mod 23 = 2;
19
9
= 196 193 mod 23 = 2 5 = 10.
19
10.хт
Таким образом, Боб получил сообщение
4
Программная реализация может быть представлена следующим
образом:
struct ShamirMessage {
int message;
int current;
};
class ShamirClient
{
public:
int P = 0;
string name;
int getRandomNumber(int min, int max);
102

vector<int> simple(int n);
void send(ShamirMessage msg, ShamirClient& client);
ShamirClient(string name, int p);
private:
vector<int> simpleNumbers;
int c;
int d;
};
vector<int> ShamirClient::simple(int n)
{
vector<int> res;
vector<bool> sieve(n, true);
for (int p = 2; p < n; p++) {
if (sieve[p]) {
res.push_back(p);
for (int i = p * p; i < n; i += p) {
sieve[i] = false;
}
}
}
return res;
}
void ShamirClient::send(ShamirMessage msg, ShamirClient& client)
{
int x;
switch (msg.current) {
case 0:
this->P = client.P;
break;
case 1:
cout << this->name << " sent message: " << msg.message << endl;
x = power(msg.message, this->c, this->P);
client.send({ x, 2 }, *this);
break;
case 2:
x = power(msg.message, this->c, this->P);
client.send({ x, 3 }, *this);
break;
case 3:
x = power(msg.message, this->d, this->P);
client.send({ x, 4 }, *this);
break;
103

case 4:
A
R
R
R
R
K
R
K
R
K
R
x = power(msg.message, this->d, this->P);
cout << this->name << " get message: " << x << endl;
break;
}
}
ShamirClient::ShamirClient(string name, int p)
{
this->name = name;
this->P = p;
this->simpleNumbers = this->simple(100);
this->c = this->getRandomNumber(1, 10);
this->c = this->simpleNumbers[this->c];
this->d = 1;
while ((this->c * this->d) % (this->P - 1)!= 1) {
this->d++;
}
}
5.4. Криптографические протоколы аутентификации,
использующие хэш-функции
и симметричную криптографию
Криптопротокол 5.4.1. SKID3
Это криптографический протокол идентификации, который пред-
полагает, что Алиса и Боб используют общий секретный ключ K.
1. Алиса выбирает случайное число
Бобу.
2. Боб выбирает случайное число
,
H (),,
BK
3. Алиса рассчитывает
RB(KH
AB
– это хэш-функция, В – имя Боба).
H (),,
RB
AB
значением, полученным от Боба. Если результаты совпадают, Алиса
убеждается в том, что она соединилась именно с Бобом.
4. Алиса посылает Бобу:
5. Боб рассчитывает
H (),
H (),
B
B
A
и сравнивает результат со значе-
нием, полученным от Алисы. Если результаты совпадают, Боб убеждается в том, что он соединился именно с Алисой.
.
Она посылает это число
.
Он посылает Алисе:
B
и сравнивает результат со
A
(A – это имя Алисы).
104

6. Алиса и Боб шифруют свои сообщения, используя секретный
K
E
K
E
A
R
K
E
A
A
K
E
A
K
E
ключ K.
Криптопротокол 5.4.2. Лягушка с широким ртом (Wide-Mouth
Frog)
Алиса и Трент используют общий секретный ключ
.BK
используют общий секретный ключ
.AK
Боб и Трент
1. Алиса объединяет метку времени, имя Боба и случайный сеансо-
вый ключ, затем шифрует созданное сообщение общим с Трентом
ключом и результат посылает Тренту вместе со своим именем: A,
TBK
A
.(,,)
A
2. Трент расшифровывает сообщение от Алисы. Затем он берет новую метку времени, имя Алисы и случайный сеансовый ключ, шифрует полученное сообщение общим с Бобом ключом и посылает резуль-
тат Бобу:
TBK
B
A
.(,,)
3. Алиса и Боб шифруют свои сообщения, используя сеансовый
ключ K.
Криптопротокол 5.4.3. Yahalom
Алиса и Трент используют общий секретный ключ
используют общий секретный ключ
.AK
Боб и Трент
.BK
1. Алиса объединяет свое имя и случайное число и отправляет созданное сообщение Бобу: A,
.
2. Боб объединяет имя Алисы, ее случайное число, свое случайное
число, шифрует созданное сообщение общим с Трентом ключом и ре-
,, .()
зультат посылает Тренту, добавляя свое имя: B,
B
RR
B
3. Трент создает два сообщения. Первое включает имя Боба, случайный сеансовый ключ K, случайные числа Боба и Алисы, оно шифруется ключом, общим для Трента и Алисы. Второе состоит из имени
Алисы, случайного сеансового ключа, оно шифруется ключом, общим
для Трента и Боба. Трент посылает оба сообщения Алисе:
RR
),,
B
(A, K).
B
(B, K,
A
4. Алиса расшифровывает первое сообщение, извлекает K и убеждается, что RA совпадает со значением, отправленным на этапе 1. Алиса
105

посылает Бобу два сообщения. Одним является сообщение Трента, за-
R
K
E
K
E
R
R
A
R
K
E
R
A
R
K
E
R
K
E
R
шифрованное ключом Боба. Второе – это
вым ключом:
(A, K),
B
(.)
B
,
зашифрованное сеансо-
B
5. Боб расшифровывает первое сообщение, извлекает K и убеждается, что
совпадает с отправленным на этапе 2.
B
6. Алиса и Боб шифруют свои сообщения, используя сеансовый
ключ K.
Криптопротокол 5.4.4. Needham-Schroeder
.AK
Алиса и Трент используют общий секретный ключ
используют общий секретный ключ
.BK
Боб и Трент
1. Алиса посылает Тренту сообщение, содержащее ее имя, имя Боба и случайное число: A, B,
.
2. Трент генерирует случайный сеансовый ключ. Он шифрует со-
общение, содержащее случайный сеансовый ключ и имя Алисы, секретным ключом, общим для него и Боба. Затем он шифрует случайное
число Алисы, имя Боба, ключ и шифрованное сообщение секретным
ключом, общим для него и Алисы. Наконец, он отправляет шифрован-
ное сообщение Алисе:
A
BKE K A
AKB
.((,),),,
3. Алиса расшифровывает сообщение и извлекает K. Она убеждается, что
совпадает со значением, отправленным Тренту на этапе 1.
Затем она посылает Бобу сообщение, зашифрованное Трентом ключом
Боба:
(K, A).
B
4. Боб расшифровывает сообщение и извлекает K. Затем он генерирует другое случайное число
отправляет Алисе:
(.)
B
.
Он шифрует это число ключом K и
B
5. Алиса расшифровывает сообщение с помощью ключа K. Она со-
(1)
здает число
лает это сообщение обратно Бобу:
R
B
и шифрует это число ключом K. Затем она посы-
ER
KB
1.()
6. Боб расшифровывает сообщение с помощью ключа K и проверя-
1
ет значение
R
B
.
7. Алиса и Боб шифруют свои сообщения, используя сеансовый
ключ K.
106

Криптопротокол 5.4.5. Otway–Rees
A
K
R
A
A
A
.AK
Алиса и Трент используют общий секретный ключ
.BK
используют общий секретный ключ
Боб и Трент
1. Алиса создает сообщение, состоящее из порядкового номера, ее
имени, имени Боба и случайного числа. Сообщение шифруется
ключом, общим для Алисы и Трента. Она посылает это сообщение
,,,
Бобу вместе с порядковым номером, ее и его именами:
(,,,)
IAB
A
.
IABE
2. Боб создает сообщение, состоящее из нового случайного числа,
порядкового номера, имени Алисы и имени Боба. Сообщение шифруется ключом, общим для Боба и Трента. Он посылает это сообщение
Тренту вместе с шифрованным сообщением Алисы, порядковым номе-
,,, ( ,,,), ( ,,,)
ром, ее и его именами:
IABE R IAB E R IAB
KA KB
AB
.
3. Трент генерирует случайный сеансовый ключ. Затем он создает
два сообщения. Одно, состоящее из случайного числа Алисы и сеансового ключа, шифруется ключом, общим для него и Алисы. Другое, состоящее из случайного числа Боба и сеансового ключа, шифруется
ключом, общим для него и Боба. Он отправляет два этих сообщения
,(,), (,)
вместе с порядковым номером Бобу:
IE R K E R K
KA KB
AB
.
4. Боб отправляет Алисе сообщение, шифрованное ее ключом, и
,(,)
порядковый номер:
IE R K
KA
A
.
5. Алиса расшифровывает сообщение, получая свои ключ и слу-
чайное число. Алиса убеждается, что при выполнении протокола они
не изменились.
6. Алиса и Боб шифруют свои сообщения, используя сеансовый
ключ K .
Криптопротокол 5.4.6. Neuman–Stubblebine
Алиса и Трент используют общий секретный ключ
K
используют общий секретный ключ
.
B
K
. Боб и Трент
1. Алиса объединяет свое имя и случайное число и отправляет со-
,
зданное сообщение Бобу:
R
.
2. Боб объединяет имя Алисы, ее случайное число и метку времени,
шифрует созданное сообщение общим с Трентом ключом и результат
107

посылает Тренту, добавляя свое имя и новое случайное число:
B
K
E
A
R
R
K
E
R
A
E
E
,, (,,)
RE ART
BK AB
B
.
3. Трент генерирует случайный сеансовый ключ. Затем он создает
два сообщения. Первое включает имя Боба, случайное число Алисы,
случайный сеансовый ключ, метку времени и шифруется ключом, общим для Трента и Алисы. Второе состоит из имени Алисы, сеансового
ключа, метки времени и шифруется ключом, общим для Трента и Боба.
Трент посылает оба сообщения Алисе вместе со случайным числом
(, , , ), (, , ),
Боба:
BR KT E AKT R
AB
ABK BB
.
4. Алиса расшифровывает сообщение, зашифрованное ее ключом,
извлекает K и убеждается, что
совпадает со значением, отправ-
ленным на этапе 1. Алиса посылает Бобу два сообщения. Одним является сообщение Трента, зашифрованное ключом Боба. Второе – это
(, , ), ( )
, зашифрованное сеансовым ключом:
B
AKT E R
B
BKB
.
5. Боб расшифровывает сообщение, зашифрованное его ключом,
извлекает K и убеждается, что значения
T
и
B
те же, что и отправ-
B
ленные на этапе 2.
6. Алиса и Боб шифруют свои сообщения, используя сеансовый
ключ K .
Криптопротокол 5.4.7. Упрощенный Kerberos
Алиса и Трент используют общий секретный ключ
используют общий секретный ключ
K
.
B
K
. Боб и Трент
1. Алиса посылает Тренту сообщение со своим именем и именем
Боба:
,AB
.
2. Трент создает сообщение, состоящее из метки времени, времени
жизни, случайного сеансового ключа и имени Алисы. Он шифрует
сообщение ключом, общим для него и Боба. Затем он объединяет
метку времени, время жизни, сеансовый ключ, имя Боба, и шифрует
полученное сообщение ключом, общим для него и Алисы. Оба
(,,,),
шифрованных сообщения он отправляет
(,,,)
TLKB
KT
A
.
Алисе:
TLKA
KT
B
3. Алиса проверяет, что сообщение от Трента – текущее. Создает
сообщение, состоящее из ее имени и метки времени, шифрует его
108

ключом K и отправляет Бобу. Алиса также посылает Бобу сообщение
E
A
K
E
от Трента, шифрованное ключом Боба:
AT E T L K A
KTKT
B
.
(, ), ( , , , )
4. Боб проверяет, что сообщение от Алисы – текущее. Создает сообщение, состоящее из метки времени плюс единица, шифрует его
(1)
ключом K и отправляет Алисе:
ET
KT
.
5. Алиса проверяет метку времени.
6. Алиса и Боб шифруют свои сообщения, используя сеансовый
ключ K .
5.5. Криптографические протоколы аутентификации,
использующие криптографию с открытым ключом
Криптопротокол 5.5.1. DASS
Алиса и Боб генерируют пары «открытый ключ / закрытый ключ»
и открытые ключи отправляют Тренту. Трент отправляет Алисе и Бобу
свой открытый ключ.
1. Алиса посылает Тренту сообщение, состоящее из имени Боба: B.
2. Трент посылает Алисе открытый ключ Боба
close
open
B
K
. Подписанное сообщение содер-
T
.
ный закрытым ключом Трента
жит имя Боба:
SBK
close
K
T
,
3. Алиса проверяет подпись Трента, убеждаясь, что она действи-
тельно получила открытый ключ Боба. Она генерирует случайный сеансовый ключ K и случайную пару «открытый ключ / закрытый
ключ» /
open
KK. Она шифрует метку времени
P
close
P
а затем подписывает время жизни L, свое имя A и сгенерированный
открытый ключ
open
K своим закрытым ключом
P
она зашифровывает K открытым ключом Боба
close
open
P
K
. Все это она отправляет Бобу:
P
SEK
close open
K
P
()
K
B
.
его с помощью
SLAK
close
K
A
,, ,
4. Боб посылает Тренту сообщение, состоящее из имени Алисы: A .
open
K , подписан-
B
T
ключом ,K
close
K
. Наконец,
A
open
K и подписывает
B
(),
T
A
109

5. Трент посылает Бобу открытый ключ Алисы
A
A
K
E
A
A
close
ный закрытым ключом Трента
жит имя Алисы:
SAK
close
K
T
K
. Подписанное сообщение содер-
T
open
,
.
A
open
K, подписан-
6. Боб проверяет подпись Трента, убеждаясь, что он действительно
получил открытый ключ Алисы. Затем он проверяет подпись Алисы и
извлекает
Затем он расшифровывает
open
K . Боб использует свой закрытый ключ и извлекает K.
P
T
, проверяя, что это сообщение – текущее.
7. Если требуется обоюдная проверка подлинности, Боб шифрует
новую метку времени
()
T
.
B
8. Алиса расшифровывает
T
ключом K и результат посылает Алисе:
B
T
ключом K , проверяя, что это сооб-
B
щение – текущее.
9. Алиса и Боб шифруют сообщения, используя сеансовый ключ K .
Криптопротокол 5.5.2. Denning–Sacco
Алиса и Боб генерируют пары «открытый ключ / закрытый ключ»
и открытые ключи отправляют Тренту. Трент отправляет Алисе и Бобу
свой открытый ключ.
1. Алиса посылает Тренту сообщение, состоящее из ее имени и
имени Боба:
2. Трент посылает Алисе открытый ключ Боба
ный закрытым ключом Трента
собственный открытый ключ
close
Трента
K
T
.
,AB
close
K
. Трент также посылает Алисе ее
T
open
K , подписанный закрытым ключом
:
SBKSAK
close
K
T
open open
,, ,
B
K
close
T
A
open
K , подписан-
B
.
3. Алиса посылает Бобу случайный сеансовый ключ K и метку
времени
открытым ключом Боба
ми:
T
, подписав их своим закрытым ключом
open
K , вместе с обоими подписанными ключа-
B
ESKTS BK
open close
K
B
(, ), , ,
K
A
A
K
close
T
110
open
B
close
K
и зашифровав
A
open
SAK
close
K
T
,
.
A
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
