Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Информационная безопасность.doc
Скачиваний:
36
Добавлен:
24.09.2019
Размер:
1.03 Mб
Скачать

3.13Деление.

В случае деления может получиться вещественное число, что недопустимо. Выход состоит в том, чтобы найти такое число, умножив на которое делитель, получим число, дающее в остатке от деления на n единицу.

a/b mod n = (a*k)/(b*k) mod n = (a*k mod n)/(b*k mod n)

Если b*k mod n=1, то (a*k mod n)/(b*k mod n) = a*k mod n. Таким образом, требуется найти k. Это можно сделать, перебирая числа m, удовлетворяющие выражению b*k = m*n+1, причем m=1, 2, …, а k должно быть целое. Заметим, что предложенный метод поиска k не является единственным и наилучшим.

А=m1*m2*m3*…

B=n1*n2*n3*…

N=k1*k2*k3*…

Если А не делится нацело на В, то среди множителей найдется, по крайней мере, один не совпадающий.

3.14Обратное по модулю.

Малая теорема Ферма утверждает, что an-1 mod n=1 для простого n и не кратного ему a.

Функция Эйлера φ(n) – количество целых положительных чисел, меньших n и взаимно простых с n. Эйлер показал, что для простого n φ(n)=n-1, для n=p*q, где p и q – простые числа, φ(n)=(p-1)*(q-1)=m.

an-1 mod n=1 по теореме Ферма. Для простого n aφ(n) mod n=1. Таким образом, обратное a по модулю n рассчитывается как aφ(n)-1 mod n.

3.15Стандарт шифрования данных гост 28147-89

Важной задачей в обеспечении гарантированной безопасности информации в ИС является разработка и использования стандартных алгоритмов шифрования данных. Первым среди подобных стандартов стал американский DES, представляющий собой последовательное использование замен и перестановок. В настоящее время все чаще говорят о неоправданной сложности и невысокой криптостойкости. На практике приходится использовать его модификации.

Более эффективным является отечественный стандарт шифрования данных.

Он рекомендован к использованию для защиты любых данных, представленных в виде двоичного кода, хотя не исключаются и другие методы шифрования. Данный стандарт формировался с учетом мирового опыта, и в частности, были приняты во внимание недостатки и нереализованные возможности алгоритма DES, поэтому использование стандарта ГОСТ предпочтительнее.

3.16Простые числа

Криптостойкость несимметричных алгоритмов базируется на трудоемкости задачи разложения числа на простые множители. Вспомним, что число называется простым, если оно делится без остатка только на себя и на 1. Взаимно простыми числами называются не обязательно простые числа, а те, у которых нет общих (одинаковых) множителей.

Рассмотрим два алгоритма, с помощью которых можно разложить число на простые множители. Первый из них слишком прост и слабо отличается от метода простого перебора. Очевидно, что для больших чисел (очень больших, т.е. представляемых 512 и более битами, а не маленьких целых чисел, занимающих 32 или 64 бита) время расчета по этому алгоритму оказывается очень большим (его не трудно подсчитать, зная производительность процессора). Второй алгоритм интересен тем, что он гораздо быстрее определяет максимальный множитель. Этот вариант больше подходит, если надо доказать, что число простое. В алгоритме используются только операции сложения и вычитания, что работает быстрее, чем умножение. Если один множитель числа N равен 1, а второй N, то это означает, что число простое. Можно данный алгоритм использовать для нахождения всех множителей, тогда его надо применять неоднократно, сначала к исходному числу, затем к частному от деления на найденный множитель и т.д.

Алгоритм 1. При поиске простых множителей проверять надо вовсе не все числа, так как четные числа (кроме 2) не являются простыми. Известно правило, по которому достигается еще большее сокращение множества проверяемых чисел: кандидаты на простоту находятся в ряду натуральных чисел на местах через 2, затем через 4. Исключение составляют первые 6 чисел. Желтым цветом выделены простые числа, белым – те числа, которые в соответствии с нашим алгоритмом являются кандидатами, но не являются простыми.

1 2 3 5 7 11 13 17 19 23 25 29 31 35 37 41 43 …

Здесь расстояние между 7 и 11 равно 4, затем между 11 и 13 расстояние равно 2, далее между 13 и 17 расстояние равно 4.

Итак, последовательность кандидатов на простые множители есть. Пользуясь ею, проверяйте по очереди, является ли очередное число множителем. Если нашли множитель, то определите кратность этого множителя, то есть делите исходное число на найденный множитель до тех пор, пока происходит деление нацело.

Алгоритм 2. Задача разложения на множители решается в двух ситуациях: тогда, когда действительно нужны множители, и тогда, когда нас интересует ответ на вопрос «является ли число простым», при этом сами множители не нужны, но надо установить, есть ли они. Тогда можно применить следующий алгоритм, который находит наибольший множитель числа N, не превышающий N.

Введем определение. Полным квадратом будем называть целое число, являющееся квадратом целого числа.

Алгоритм использует интересное свойство числового ряда, которое Вы можете увидеть в представленной таблице:

Z

0

1

2

3

4

5

6

7

8

Z’=2*Z+1

1

3

5

7

9

11

13

15

17

Z2

0

1

4

9

16

25

36

49

64

Обратите внимание на то, что полный квадрат можно рассчитать следующим образом:

Z2i = Z2i-1 + Z’i-1

Здесь i – номер столбца, изменяется от 1 с шагом +1. По таблице мы видим, что

12=1+02=1+0=1

22=3+12=3+1=4

32=5+22=5+4=9

42=7+32=7+9=16.

Этот способ расчета полных квадратов хорош тем, что использует операцию сложения, которая выполняется компьютером гораздо быстрее, чем умножение.

Вернемся к задаче поиска множителей. Попытаемся свести задачу поиска множителя к расчету квадратов (а квадраты будем считать, используя только сложение!).

Любое число N можно представить в виде произведения некоторых чисел U*V, так как значение одного из сомножителей может быть равно 1. Обозначим

, а .

Тогда

, , .

Таким образом, если мы подберем два полных квадрата, разность которых равна N, то мы сможем посчитать множители.

Число N может быть само полным квадратом, поэтому можно начать с x=N и с y=0. В данном алгоритме не определяется способ расчета N. Предполагается, что он (точнее, его приближенное значение) известен. На самом деле, можно начинать с любого значения, меньшего N

Оперировать в алгоритме x и y не удобно, нам лучше работать с x’ = 2x+1, y’=2y+1, так как, согласно указанным выше свойствам чисел, можно легко рассчитывать следующие квадраты x и y. Таким образом, приходим к следующему алгоритму.

Берем в качестве начального значения x’ = N, y’=2*0+1=1. Заметим, что эти начальные значения не являются обязательными, можно начинать с любого x и с любого y, требуется только соблюдение следующих условий: x>y, y>=0, x<=N. Такие начальные условия гарантируют, что максимальный множитель не будет пропущен. В случае если x близок к N, алгоритм быстрее завершается.

Теперь надо вычислить величину невязки r по формуле, расположенной ниже.

О чевидно, что если r=0, то это означает, что мы нашли пару x,y, удовлетворяющую условиям задачи, то есть мы нашли U, V (их нетрудно вычислить по указанным выше формулам).

Е сли r отрицательное, следовательно, x мало, поэтому, надо взять следующее значение x: x=x+1, а посчитать квадрат нового x мы можем, воспользовавшись указанными выше свойствами.

Если r положительное, следовательно, y мало, поэтому, надо взять следующее значение y: y=y+1. При этом, очевидно, r надо уменьшить на y (подставьте в формулу).

Окончательно, алгоритм состоит в следующем. Задаем начальные значения для r, x’, y’. Повторяем, пока r<>0: если r<0, увеличиваем x’ на 2 и пересчитываем r=r+x’, иначе увеличиваем y’= y’+2, r=r-y’.

В заключении следует сказать о том, почему алгоритм закончится. На каждом шаге мы изменяем на 1 только x или только y. Следовательно, V непрерывно растет. Если оно станет равно N, то U=1 и при этом r=0.