Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основные математические принципы в реализации некоторых алгоритмов информационной безопасности. Учебное пособие
.pdf
1019 7
в) Вычислим
126 126 (mod 23)
126 11 6 11 9 11(mod 23)
1019
4.2.
126 21 9 11 21 9 11 ( 2) 9 1 9(mod 23)x
1
5. Обратная замена
773
.xxd
1
9 6 54(mod138)x
.
.
.
.
Таким образом, искомый остаток равен 54.
3) Вычислить остаток от деления 2
5 432 675
на 13.
Проверим, что (2,13) = 1. Значит, применим алгоритм № 1.
1. Найдем φ(13) = 13 − 1 = 12.
2. Разделим 5432675 на 12. Результат представим в виде:
5 432 675 = 12 452 722 + 11.
5 432 675 11
3. Вычислим
22(mod13)
.
Задача свелась к отысканию остатка от деления 211 на 13.
4
2 16 3(mod13)
54
222326(mod13)
11 5 2
2 (2)2662 67(mod13).
,
.
Таким образом, искомый остаток равен 7.
Задания для самостоятельного решения
1. Найти функцию Эйлера для чисел: 1) 375; 2) 720; 3) 957; 4) 988;
5) 990; 6) 1200; 7) 1440; 8) 1500; 9) 1890; 10) 4320.
2. Найти функцию Эйлера для простых чисел:
1) 17; 2) 31; 3) 43; 4) 71; 5) 83.
3. Найти функцию Эйлера для степеней простых чисел:
1) 36; 2) 54; 3) 113; 4) 173; 5) 233.
4. Найти функцию Эйлера от каждого из следующих произведений,
не вычисляя самих произведений: 1) 5 11; 2) 5 7 13; 3) 17 23;
61

4) 12 17; 5) 14 15; 6) 11 14 15; 7) 32 81 49; 8) 24 28 45;
x
9) 720 957; 10) 990 1890.
Указание. Чтобы сомножители были попарно простыми, следует
предварительно представить их, а затем и все произведение в каноническом разложении.
5. Сколько чисел в интервале от 1 до 120 не взаимно простых с 30?
6. Дано, что φ(а) = 3600 и 357.
a Найти а.
yz
7. Дано, что φ(а) = 120 и а = pq, где р и q – различные простые чис-
ла. Найти а, если р – q = 2.
22
8. Дано, что φ(а) = 11 424 и
а pq
где р и q – различные про-
стые числа. Найти а.
x
()7
9. Решить уравнение
705 894.
10. Найти количество натуральных чисел, меньших числа 300 и
имеющих с ним наибольшим общим делителем число 20.
11. Найти количество натуральных чисел, меньших числа 1665 и
имеющих с ним наибольшим общим делителем число 37.
12. Найти количество натуральных чисел, меньших числа 1476 и
имеющих с ним наибольшим общим делителем число 41.
62

5. ОСНОВНЫЕ АЛГОРИТМЫ
В ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ
Большинство средств защиты информации базируется на использовании криптографических шифров и процедур шифрования / расшифрования. В соответствии со стандартом шифрования ГОСТ 28147–89
под шифром понимают совокупность обратимых преобразований
множества открытых данных на множество зашифрованных данных,
задаваемых ключом и алгоритмом криптографического преобразования [10]. Существует множество разных криптографических алгоритмов. Назначение этих алгоритмов – защита
информацию приходится от разных угроз и разными способами. Чтобы
обеспечить надежную и адекватную защиту с помощью криптоалгоритма (КА), нужно понимать, какие бывают КА и какой тип алгоритма
лучше приспособлен для решения конкретной задачи.
Известно несколько классификаций криптографических алгоритмов [50]. Одна из них подразделяет КА в зависимости
чей, применяемых в конкретном алгоритме:
на бесключевые КА – не используют в вычислениях никаких
ключей;
одноключевые КА – работают с одним ключевым параметром
(секретным ключом);
двухключевые КА – на различных стадиях работы в них приме-
няются два ключевых параметра: секретный и открытый ключи.
Существуют более детальные классификации, одна из которых
приведена на рисунке.
Охарактеризуем кратко основные типы КА.
Хэширование – это метод криптозащиты, представляющий собой
контрольное преобразование информации: из данных неограниченного
информации. Защищать же
от числа клю-
63

размера путем выполнения криптографических преобразований вычисляется хэш-значение фиксированной длины, однозначно соответствующее исходным данным.
Криптографические
алгоритмы
Бесключевые
Хэширование
Одноключевые
Симметричное
шифрование
Блочное
Поточное
Классификация криптоалгоритмов зашиты информации
Хэширование
Двухключевые
Ассиметричное
шифрование
Электронная подпись
Симметричное шифрование использует один и тот же ключ как для
зашифровывания, так и для расшифровывания информации.
Симметричное шифрование подразделяется на два вида: блочное и
поточное, хотя следует отметить, что в некоторых классификациях они
не разделяются и считается, что поточное шифрование – это шифрование блоков единичной длины.
Блочное шифрование характеризуется тем, что
информация предварительно разбивается на блоки фиксированной длины (например, 64
или 128 бит). При этом в различных КА или даже в разных режимах
работы одного и того же алгоритма блоки могут шифроваться как
независимо друг от друга, так и «со сцеплением», т. е. когда результат
шифрования текущего блока данных зависит от значения
предыдущего
блока или от результата шифрования предыдущего блока.
Поточное шифрование применяется прежде всего тогда, когда информацию невозможно разбить на блоки – скажем, есть некий поток
данных, каждый символ которых требуется зашифровать и отправить,
64

не дожидаясь остальных данных, достаточных для формирования бло-
хy
ка. Алгоритмы поточного шифрования шифруют данные побитно или
посимвольно.
Асимметричное шифрование характеризуется применением двух
типов ключей: открытого – для зашифровывания информации и секретного – для ее расшифровывания. Секретный и открытый ключи связаны между собой достаточно сложным соотношением.
Электронная цифровая подпись (ЭЦП) используется для
подтверждения целостности и авторства данных.
Криптоалгоритмы зашиты информации базируются на базовых понятиях теории чисел, являясь вычислительно сложным видом задач
высокого уровня безопасности алгоритмических средств.
надежного
5.1. Используемые вычислительно сложные задачи
и достигаемый уровень безопасности
алгоритмических средств
Вычислительно сложные задачи базируются на предположении
существования односторонних функций с секретом. Данный термин
был введен в 1976 году Уитфилдом Диффи и Мартином Хеллманом в
работе [11]. Они показали, что односторонние функции с секретом могут использоваться для обмена секретными ключами с использованием
открытых каналов связи. Формально односторонняя функция определяется следующим образом [11–13].
Определение. Функция f, сопоставляющая набору значений из X
набор значений из Y, называется односторонней, если легко вычислить f
для всех значений x X, но для заданного значения y Y вычислительно трудно найти x такой, что () .f
Односторонняя функция с секретом – это односторонная функция f :
⇒ Y с дополнительным свойством, дающим некоторую информацию,
X
с помощью которой становится возможно найти для заданного y такой
x X, что f(x) = y.
Уитфилд Диффи и Мартин Хеллман предложили задачу дискретного логарифмирования в качестве односторонней функции с секретом
и предположили существование других вычислительно сложных задач,
пригодных для использования
секретом.
в качестве односторонней функции с
65

Примером односторонней функции является произведение простых
чисел. Чтобы продемонстрировать односторонний характер умножения простых чисел, мы можем взять два простых числа, например 9419
и 1933, и перемножить их. Используя калькулятор, нам понадобится
всего лишь несколько секунд, чтобы получить ответ 18 206 927. Однако, если вместо этого нам дадут число 18 206 927 и попросят найти
простые множители (два
чить 18 206 927), это займет у нас гораздо больше времени. Если вы
сомневаетесь в том, насколько трудно находить простые множители,
то примите во внимание следующее. Преподавателю понадобилось
лишь десять секунд, чтобы образовать число 1 709 023, но у вас с калькулятором в руках, чтобы найти простые множители, это займет
рую часть дня.
В качестве главного примера данного учебного пособия односторонней функции рассмотрим
Обратная функция обозначается как дискретный логарифм:
числа, которые перемножили, чтобы полу-
доб-
x
ya p
mod .()
(5.1)
Для того чтобы обеспечить трудность вычисления x при использовании лучших современных компьютеров, в настоящее время используются числа размером более 512 бит. На практике часто применяются
и другие односторонние функции, например, так называемые хешфункции, оперирующие с существенно более короткими числами порядка 60–120 бит.
Сначала мы покажем, что вычисление прямого значения
x
ya p может быть выполнено достаточно быстро. Начнем с
примера вычисления числа
Таким образом, значение данной функции вычисляется всего за четыре операции умножения. На этом основан общий алгоритм.
)mod(
xy
16
16 2 2
mod ( ) mod .apa p
(log od .)m
p
a
modap
. Мы можем записать:
(5.2)
2
2
66

Для описания алгоритма введем величину
х
log
х (далее все логарифмы будут двоичные, поэтому в дальнейшем
2
[log ]t
– целую часть
2
мы не будем указывать основание 2). Вычисляем числа ряда
24816
,,,, mod.()ааааа р
(5.3)
В ряду (5.3) каждое число получается путем умножения предыдущего числа самого на себя по модулю р. Запишем показатель степени х
в двоичной системе счисления:
х xx xx
х
mod
Тогда число
уа p
может быть вычислено как
ya p
i
Пример. Пусть требуется вычислить
... .()
1102
tt
t
i
2
x
i
mod .
0
(5.4)
100
3 mod 7.
Имеем t
log100 6.[] Вычислим числа ряда:
a
2
a
a
4
8
a
a16 a
32
a
64
3 2 4 2 4 2 4
Записываем показатель в двоичной системе счисления:
100 = (1100100)
.
2
Произведем вычисления по формуле (5.4):
4 2 1 1 4 1 1 = 4.
Таким образом, нам потребовалось всего восемь операций умножения.
Программная реализация возможна следующим образом:
int deciminalToBinary(int number);
int composition(const vector<int>& mass, int xBin) {
int multiply = 1;
for (int i: mass) {
if (xBin % 2) {
multiply *= i;
67

}
p
xBin /= 10;
}
return multiply;
}
int main() {
int a, x, p; //axmod p
cin >> a >> x >> p;
int t = int(log(float(x))/log(2.0));
vector<int> mass;
int modul = a%p;
for (int i = 0; i <= t; i++) {
mass.push_back(modul);
modul = (modul * modul) % p;
}
int xBin = deciminalToBinary(x);
int result = composition(mass, xBin)%p;
}
Данную задачу возможно было решить с помощью алгоритма, опи-
санного в п. 4.2 «Теоремы Эйлера и Ферма».
1. φ(m) = φ(7) =6.
2. N = φ(m)q + r, где r, qZ и 0 ≤ r < φ(m).
100 = 7 14 + 2.
100
3. 3
mod 7 = 32 mod 7 = 2 mod 7.
В общем виде получим следующее утверждение.
Утверждение (о сложности вычислений). Количество операций
умножения при вычислении (5.1) по описанному методу не превосходит 2 log х.
Важно отметить, что столь же эффективные алгоритмы вычисления
обратной функции (5.2) неизвестны. Один из методов вычисления (5.2) –
«шаг младенца, шаг великана». Этот метод требует порядка
2
опе-
раций.
Покажем, что при больших р функция (5.1) действительно односторонняя, если для вычисления обратной функции используется метод «шаг младенца, шаг великана». Получаем следующий результат
(табл. 5.1).
68

Таблица 5.1
p
Количество умножений для вычисления прямой
и обратной функции
Количество десятичных
знаков в записи p
12
60
90
Вычисление (5.1) Вычисление (5.2)
2
40 = 80
2 200 = 400
2 300 = 600
106
2
2 10
2 10
30
45
Мы видим, что если использовать модули, состоящие из 50–100 десятичных цифр, то «прямая» функция вычисляется быстро, а обратная практически не вычислима. Рассмотрим, например, суперкомпьютер, который умножает два 90-значньгх числа за 10
–14
сек. Для
вычисления (5.1) такому компьютеру потребуется:
–14
Т = 600 10
с,
а для вычисления (5.2):
45
–14
Т = 10
10
= 1031 с,
т. е. более 1022 лет. Мы видим, что вычисление обратных функций
практически невозможно при длине чисел порядка 90 десятичных
цифр, и использование параллельных вычислений и компьютерных
сетей существенно не меняет ситуацию. В рассмотренном примере мы
предполагали, что обратная функция вычисляется за
2
операций.
В настоящее время известны и более «быстрые» методы вычисления
дискретного логарифма, однако общая картина та же: количество требуемых в них операций много больше 2 log р. Таким образом, можно
утверждать, что функция (5.1) действительно односторонняя, но с оговоркой. Никем не доказано, что обратная функция (5.2) не может быть
вычислена столь же быстро, как и «прямая».
Используем одностороннюю функцию (5.1) для решения всех
задач, описанных в данном разделе, не забывая, однако, что точно
так же может быть использована и любая другая односторонняя
функция [24].
Будем придерживаться следующей терминологии при рассмотрении криптографических протоколов разного уровня.
69

Отправитель сообщений и их получатель могут быть физическими лицами, организациями, какими-либо техническими системами.
Иногда об А и В говорят как об абонентах некоторой сети, о пользователях некоторой компьютерной системы или, еще более формально, как об абстрактных «сторонах» (англоязычный термин «раггу»)
или «сущностях» (entity), участвующих в информационном взаимодействии. Но чаще бывает удобно отождествлять участников обмена
с некоторыми людьми и заменить формальные обозначения А и В на
Алиса и Боб.
Предполагается, что сообщения передаются по так называемому
«открытому» каналу связи, в принципе доступному для прослушивания некоторым другим лицам, отличным от получателя и отправителя.
Такая ситуация возникает при радиопередаче сообщений (например,
посредством мобильного телефона) и возможна при использовании
даже таких «проверенных» каналов связи, как проволочный телефон,
телеграф и обычная почта. Особый интерес как средство передачи
данных, стремительно завоевывающее лидирующие позиции во всем
мире и в то же время чрезвычайно уязвимое с точки зрения возможности несанкционированного доступа третьих лиц, представляет Интернет. В этой среде легко реализуется не только копирование, но и подмена передаваемых сообщений.
В криптографии обычно предполагается, что у лица, передающего
сообщения и (или) их принимающего, есть некоторый противник Е,
который может быть конкурентом в бизнесе, членом преступной группировки, представителем иностранной разведки, и этот противник может перехватывать сообщения, передаваемые по открытому каналу, и
анализировать их. Часто удобно рассматривать противника как некую
особу по имени Ева, которая имеет в своем распоряжении мощную
вычислительную технику и владеет методами криптоанализа.
5.2. Тесты на простоту
Доказуемо простые числа, как правило, используются в качестве
модулей криптосистем, основанных на проблеме дискретного логарифмирования, таких как шифр Шамира, криптосистема Эль-Гамаля и
связанные с ней стандарты цифровой подписи ГОСТ Р 34.11–94, ГОСТ
Р 34.11–2001, DSA и EСDSA. Рассмотрим тесты на простоту Миллера,
Поклингтона, ГОСТ.
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
