- •Введение в высшую алгебру.
- •Группы.
- •Кольца.
- •Подгруппыи смежные классы.
- •Идеалы и классы вычетов.
- •Классы вычетов.
- •Идеалы и классы вычетов целых чисел.
- •Изоморфность.
- •Мультипликативная группа поля Галуа.
- •Основные положения теории чисел
- •Теорема Ферма.
- •Функция Эйлера.
- •Теорема Эйлера.
- •Классификация методов шифрования.
- •Пример обмена информацией по методу Эль-гамаля.
- •Алгоритм обмена сообщениями по Эль-гамалю (модификация дифи).
- •Алгоритм rsa
- •Алгоритм Диффи-Хеллмана. Открытое распределение ключей.
- •Вычислительные алгоритмы для криптологии. Алгоритм Евклида.
- •Расширенный алгоритм Евклида.
- •Модульные алгоритмы.
- •Модульное возведение в степень.
- •Нахождение числа, обратного по модулю.
- •Двоичный алгоритм Евклида.
- •Парадокс дней рождения.
- •Факторизация.
- •Вычисление числа по его вычетам.
- •АлгоритмМиллера-Рабина:
- •Вычисление длины периода последовательности (метод Флойда)
- •Полиномы.
- •Алгебра классов вычетов многочленов.
- •Поля галуа.
- •Поле Галуа для полиномов.
- •Свойства неприводимых многочленов.
- •Линейные переключательные схемы.
- •АлгоритмCrc:
- •Наиболее популярные магические полиномы:
- •Выбор полинома.
- •Типы ошибок:
- •Генераторы случайных последовательностей.
- •Постулаты случайности последовательностей Голомба.
- •Регистр с обратной связью.
- •Шифрование при помощи случайной последовательности (гамма-последовательности).
- •Потоковые шифры.
- •Генератор Греффе.
- •Генератор с нелинейным фильтром.
- •Сжимающий генератор.
- •Система блочного шифрования.
- •Информационная безопасность.
- •Подотчетность.
- •Гарантированность.
Расширенный алгоритм Евклида.
Соотношение Безу как следствие из алгоритма Евклида:
Для исходных любых чисел
и
найдутся числа
и
такие, что будет выполняться линейная
комбинация:
,
где d – НОД исходных чисел.
Но в этой формуле один из коэффициентов
отрицательный. Коэффициенты тоже целые.
Следствие из алгоритма Евклида: любое число представимо в виде степеней простых чисел.
u, v – коэффициентыпри aиb.
1 шаг.
u = 1, v=q0.
|
2 шаг.
u = q1; v = 1+q0*q1. |
то есть на каждом шаге получаем аналог соотношения Безу.
Модульные алгоритмы.
Если вместо модульных операций использовать простые, то быстро возникает переполнение.
Модульное возведение в степень.
Схема для получения
:
.
R<– 1 //присваиваем результат R=1
for I = ndownto 0 do {
R<– (
) //
– двоичные коэффициенты разложения
}
returnR
Алгоритм работает начиная со старших разрядов.
Если в цикле заменить строчку возведения
в квадрат на R<– (
,
то получим модульного умножение.
Нахождение числа, обратного по модулю.
У каждого элемента поля есть обратный.
.
Как сделать деление? Надо заменить на умножение на число в минус первой степени.
По малой теореме Ферма
(Если p — простое число и
целое
)
т.е. если модуль простой, то можно легко найти обратно число.
Также для нахождения чисел, обратных данному числу по модулю можно применять соотношение Безу.
Для этого числаaиMдолжны быть взаимно простыми: gcd(a,M)=1.При этом M не обязательно простое.
Поскольку gcd(a,M)=1,
то соотношение Безу будет
.
От каждого числа возьмем модуль M:
=>
Обратное число
modM.
Двоичный алгоритм Евклида.
Позволяет найти числа a и b такие, что
.
Если числа большие и надо находить по модулю, то надо понять, как будем делить большое число на большое. Операции деления для таких чисел как таковой нет. Алгоритм работает без деления.Преимущество алгоритма в том, что операции деления и умножения заменяются операциями сдвига, которые выполняются быстрее.
Есть два числа а и b, они записываются в двоичном виде. Начальное значение НОД примем «1».
Если младшие разряды оба равны нулю, то оба числа четные иесть общий делитель 2. Оба числа делим на 2, а затем общий результат НОД умножаем на 2. В противном случае не делим.
На данном этапе возможны 4 случая:
00. Оба числа делятся на 2. Можно разделить каждое из чисел на 2. Если оба числа делятся на 2, то d умножаем на 2 путем сдвига, а также сдвигаем вправо на 1 бит оба числа и т.д.
01 и 10. Одно из четное – оно делится на 2. «2» в НОД не входит. Разделить число, которое делится на 2, делить до тех пор, пора в младшем разряде не появится «1».
11. Оба числа нечетные. Проверяем, какое большее, какое меньшее. Вычитаем из большего меньшее. Разность будет четная, т.к. разность двух нечетные чисел есть четное число1. Можно разделить ее на 2, т.к. НОД не будет содержать 2 (оба числа нечетные).
Алгортм продолжается до тех пор, пока при вычитании не получим 0, т.е. 2 числа стали равны и значит, что на предыдущем шаге мы получили НОД.
Пример: Найдем НОД(56,84):
Изначально: a = 0111000 (5610) b = 1010100 (8410) d = 1
|
1 шаг: оба числа четные a = 011100 b = 101010 d = 10
|
2 шаг: a = 01110 b = 10101 d = 100
|
3шаг: a = 0111 b = 10101–0111 = 1110 d = 100
|
4 шаг: a = 111 b = 111 d = 100 |
т.к. на данном шаге b-a = 0, то получаем НОД = 100 * a = 100 * 111 = 11100 (2810)
