Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шнайер - Прикладная криптография.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
10.13 Mб
Скачать

Целые числа Блюма

Если p и q - два простых числа, конгруэнтных 3 по модулю 4, то n = pq иногда называют целым числом Блюма. Если n - это целое число Блюма, у каждого квадратичного вычета ровно четыре квадратных корня, один из которых также является квадратом - это главный квадратный корень. Например, главный квадратный корень 139 mod 437 - это 24. Остальные три корня - это 185, 252 и 413.

Генераторы

Если p - простое число, и g меньше, чем p, то g называется генератором по модулю p, если для каждого числа b от 1 до p - 1 существует некоторое число a, что gab (mod p).

Иными словами, g является примитивом по отношению к p. Например, если p = 11, то 2 - это генератор по модулю 11:

210 = 1024  1 (mod 11)

21 = 2  2 (mod 11)

28 = 256  3 (mod 11)

22 = 4  4 (mod 11)

24 = 16  5 (mod 11)

29 = 512  6 (mod 11)

27 = 128  7 (mod 11)

23 = 8  8 (mod 11)

26 = 64  9 (mod 11)

25 = 32  10 (mod 11)

Каждое число от 1 до 10 может быть представлено как 2a (mod p). Для p = 11 генераторами являются 2, 6, 7 и 8. Другие числа не являются генераторами. Например, генератором не является число 3, потому что не существует решения для

3a  2 (mod 11)

В общем случае проверить, является ли данное число генератором, нелегко. Однако задщача упрощается, если известно разложение на множители для p - 1. Пусть q1, q2, ... , qn - это различные простые множители p - 1. Чтобы проверить, является ли число g генератором по модулю p, вычислите

g(p-1)/q mod p

для всех значений q = q1, q2, ... , qn.

Если это число равно 1 для некоторого q, то g не является генератором. Если для всех значений q рассчитанное значение не равно 1, то g - это генератор.

Например, пусть p = 11. Простые множители p - 1 = 10 - это 2 и 5. Для проверки того, является ли число 2 генератором, вычислим:

2(11-1)/5 (mod 11) = 4

2(11-1)/2 (mod 11) = 10

Ни один из ответов не равен 1, поэтому 2 - это генератор.

Проверим, является генератором ли число 3:

3(11-1)/5 (mod 11) = 9

3(11-1)/2 (mod 11) = 1

Следовательно, 3 - это не генератор.

При необходимости обнаружить генератор по модулю p просто случайно выбирайте число от 1 до p - 1 и проверяйте, не является ли оно генератором. Генераторов достаточно, поэтому один из них вы, скорее всего, найдете быстро.

Вычисление в поле Галуа

Не тревожьтесь, все это мы уже делали. Если n - простое число или степень большого простого числа, то мы получаем то, что математики называют конечным полем. В честь этого мы используем p вместо n. В действительности этот тип конечного поля настолько замечателен, что математики дали ему собственное имя - поле Галуа, обозначаемое как GF(p). (В честь Эвариста Галуа, французского математика, жившего в девятнадцатом веке и успевшего значительно продвинуть теорию чисел, прежде чем в 20 лет он был убит на дуэли.)

В поле Галуа определены сложение, вычитание, умножение и деление на ненулевые элементы. Существует нейтральный элемент для сложения - 0 - и для умножения - 1. Для каждого ненулевого числа существует единственное обратное число (это не было бы так, если бы p не было бы простым числом). Выполняются коммутативный, ассоциативный и дистрибутивный законы.

Арифметика поля Галуа широко используется в криптографии. В нем работает вся теория чисел, поле содержит числа только конечного размера, при делении отсутствуют ошибки округления. Многие криптосистемы основаны на GF(p), где p - это большое простое число.

Чтобы еще более усложнить вопрос, криптографы также используют арифметику по модулю неприводимых многочленов степени n, коэффициентами которых являются целые числа по модулю q, где q - это простое число. Эти поля называются GF(qn). Используется арифметика по модулю p(x), где p(x) - это неприводимый многочлен степени n.

Математическая теория, стоящая за этим, выходит далеко за рамки этой книги, хотя я и опишу ряд криптосистем, использующих ее. Если вы хотите попробовать с неприводимыми многочленами, то GF(23) включает следующие элементы: 0, 1, x, x + 1, x2, x2 + 1, x2 + x, x2 + x + 1. Удобный для параллельной реализации алгоритм вычисления обратных значений в GF(2n) приведен в [421].

При обсуждении полиномов термин "простое число" заменяется термином " неприводимый многочлен". Полином называется неприводимым, если его нельзя представить в виде двух других полиномов (конечно же, кроме 1 и самого полинома). Полином x2 + 1 неприводим над целыми числами, а полином x3 + 2 x2 + x не является неприводимым, он может быть представлен как x(x + l)(x + 1).

Полином, который в данном поле является генератором, называется примитивным или базовым, все его коэффициенты взаимно просты. Мы снова вернемся к примитивным полиномам, когда будем говорить о сдвиговых регистрах с линейной обратной связью (см. раздел 16.2).

Вычисления в GF(2n) могут быть быстро реализованы аппаратно с помощью сдвиговых регистров с линейной обратной связью. По этой причине вычисления над GF(2n) часто быстрее, чем вычисления над GF(p). Так как возведение в степень в GF(2n) гораздо эффективнее, то эффективнее и вычисление дискретных логарифмов [180, 181, 368, 379]. Дополнительную информацию об этом можно найти в [140].

Для поля Галуа GF(2n) криптографы любят использовать в качестве модулей трехчлены p(x) = xn + x + 1, так как длинная строка нулей между коэффициентами при xn и x позволяет просто реализовать быстрое умножение по модулю [183]. Полином должен быть примитивным, в противном случае математика не будет работать. xn + x + 1 примитивен для следующих значений n, меньших чем 1000 [1649, 1648]:

1, 3, 4, 6, 9, 15, 22, 28, 30, 46, 60, 63, 127, 153, 172, 303, 471, 532, 865, 900

Существуют аппаратные реализации GF(2127), где p(x) = x127 + x + 1 [1631, 1632, 1129]. Эффективная архитектура аппаратуры возведения в степень для GF(2n) рассматривается в [147].