Элементы теории чисел и криптозащита. Воронков Б.Н - 53 стр.

UptoLike

Рубрика: 

53
13. Алгоритм Хэда умножения по mod m
Если Вы умножите два числа по модулю m обычным способом, тогда,
естественно, возникает необходимость обращаться с большими числами
порядка m
2
. Однако умножениеэто только повторное сложение, так что, в
принципе, можно проводить умножение без операций над числами, боль-
шими, чем 2 m. (Например, 3 × 8 по модулю 10 можно представить как
8 + 8 = 16 6, 6 + 8 = 14 4). Конечно, это было бы недопустимо непрак-
тично проделывать для чисел из десяти цифр, и алгоритм Хэда (опублико-
ванный в 1980 г
.) представляет собой более тонкий путь выполнения умно-
жения без представления чисел, больших, чем 2m. Формально мы уже вы-
полнили его, так как в данном случае число 2m заменено на 4m, так что не
стоит беспокоиться. Для повышенной точности это даёт возможность уве-
ренно оперировать с числами, такими как 10
18
. Алгоритм Хэда может быть
включён в виде подпрограммы в степенной алгоритм.
Нам нужно умножить х и у по модулю m, где мы принимаем 0 х m,
0 y m. Метод проходит несколько стадий, и мы исключим некоторые де-
тали, проверяемые в качестве упражнений.
13.1. Лемма. Пусть m 2, T =
1
2
m
+
, t = T
2
m. Тогда T t T и
T
2
2m.
13.2. Лемма. Пусть x = aT + b, где 0 b < T. Тогда 0 а Т. Пусть
y = c T + d, где 0 d < T. Тогда 0 с Т.
13.3. Лемма. а) определим z ad + bc (mod m), где 0 z < m. Тогда
ad m, bc m и ху act + zT + bd (mod m).
б) пусть ac = eT + f, где 0 f < T. Тогда 0 е Т и
xy (et + z)T + ft + bd (mod m).
в) пусть v z + et (mod m), 0 v m. Пусть
v = gT + h, где 0 h < T.
Тогда 0 g T и xy hT + (f + g)t + bd (mod m).
Вам, конечно, хотелось бы проверить результирующую программу на
примерах, вышеприведенных для обычного степенного алгоритма. Хоро-
шим тестом для вычислений с большими числами было бы взять a = 2 и
m = некоторому большому простому числу, n = m – 1.
Вычет по теореме
Ферма будет равен 1. Представим целый набор больших простых чисел:
10
9
+ 7, 10
10
+ 19, 10
11
+ 3, 10
12
+ 39, 10
13
+ 37, 10
14
+ 31, 10
15
+ 37.