Конструкция конечного поля из p2 элементовПоле из p2 элементов, где p — нечетное простое число, является квадратичным расширением поля Zp. Как известно, оно является факторкольцом кольца многочленов Zp[x] от одной переменной над полем Zp по главному идеалу, порожденному любым неприводимым многочленом степени 2. Естественно в качестве такого многочлена выбрать многочлен f(x)=x2−r, где r — любой элемент кольца Zp, не являющийся квадратом. Хорошо известно, что группа ненулевых элементов любого конечного поля является циклической. Следовательно, все ненулевые элементы поля Zp являются степенями одного элемента a∈Zp, который порождает циклическую группу порядка p−1: ∀b∈Zp, b≠0b=ak для некоторого k∈Z, k≥0. При этом, как легко видеть, элемент b является квадратом тогда и только тогда, когда k четное. Отсюда, а также из Малой теоремы Ферма, легко выводится следующее утверждение. Предложение. Элемент r∈Zp является квадратом в поле Zp (т.е. r=x2 для некоторого x∈Zp) тогда и только тогда, когда r(p−1)/2≡1(modp). Это предложение вместе с алгоритмом быстрого возведения в степень дает нам алгоритм проверки, является ли элемент r квадратом в поле Zp. Поскольку среди ненулевых элементов квадратов столько же, сколько и не квадратов (элементы ak для четных и нечетных k, где a — порождающий элемент циклической группы ненулевых элементов поля Zp по умножению), то не квадратов очень много, и, перебирая по порядку числа 0<r<p, мы быстро найдем элемент r∈Zp, не являющийся квадратом. Это значит, что многочлен f(x)=x2−r не имеет корней в Zp, т.е. является неприводимым. Следовательно, факторкольцо Zp[x]/Ideal(f(x)) является полем. Это факторкольцо содержит p2 элементов. Каждый элемент факторкольца представляется многочленом степени 1 вида g(x)=ax+b,a,b∈Zp. Операции сложения и вычитания определяются естественным образом. Умножаются подобные многочлены с помощью следующего сравнения по модулю идеала, порожденного f(x): x2≡r(modf(x)). Отсюда получаем: (ax+b)(cx+d)=acx2+(ad+bc)x+bd≡≡acr+(ad+bc)x+bd=(ad+bc)x+(acr+bd)(modf(x)). Для определения операции деления вычислим обратный элемент к элементу g(x)=ax+b, где a≠0. Имеем: (ax+b)(ax−b)=a2x2−b2≡a2r−b2(modf(x)). Из того, что r не является квадратом в Zp, вытекает, что h=a2r−b2≢0(modp) (иначе получилось бы r≡(b/a)2(modp)). Значит, элемент h обратим в Zp. Тогда, как легко видеть, элемент h−1(ax−b) будет обратным элементом к элементу g(x)=ax+b. ПримерПостороим поле GF(72), содержащее 49 элементов. Это поле является квадратичным расширением поля Z7. Найдем элемент, не являющийся квадратом по модулю 7. Элемент r=3 подходит, т.к. 3(7−1)/2=33=27≡−1(mod7). Следовательно, многочлен f(x)=x2−3 неприводим на полем Z7. Поэтому факторкольцо Z7[x]/Ideal(f(x)) является полем, содержащим 72=49 элементов. Его элементы представляются линейными многочленами вида ax+b,a,b∈Z7. Умножение определяется с помощью сравнения x2≡3(modf(x)). Для примера перемножим два элемента факторкольца: 5x+3 и 2x+1. Имеем (5x+3)(2x+1)=10x2+(5+6)x+3≡≡3x2+4x+3≡3⋅3+4x+3≡4x+5(modf(x)). Теперь найдем обратный элемент к элементу 5x+3. Обозначим h≡(5x+3)(5x−3)≡25x2−9≡≡4x2−2≡4⋅3−2≡10≡3(modf(x)). Вычислим обратный к h элемент в поле Z7. Имеем h−1=3−1≡5(mod7). Следовательно, (5x+3)−1≡h−1(5x−3)≡5(5x−3)≡≡25x−15≡4x+6(modf(x)). Проверим, не ошиблись ли мы и действительно ли элемент 4x+6 является обратным к элементу 5x+3. Имеем: (5x+3)(4x+6)≡20x2+(30+12)x+18≡≡6x2+4≡6⋅3+4≡22≡1(modf(x)). Всe верно. Реализация арифметики в поле ZpПрограммная реализация поля GF(p2) подразумевает, что мы умеем работать с элементами поля Zp, т.е. с целыми числами, рассматриваемыми по модулю простого числа p. При этом в практических приложениях (например, в криптографии) простое число p может быть очень большим (например, 200-значным десятичным), и тупые алгоритмы перебора, к примеру, при нахождении обратного элемента, для таких больших чисел не работают. В теории чисел есть два замечательных алгоритма, которые надо использовать: 1) алгоритм быстрого возведения в степень и 2) расширенный алгоритм Евклида. Оба эти алгоритма являются настоящими жемчужинами среди множества алгоритмов, известных человечеству. В нашем случае алгоритм быстрого возведения в степень по модулю p позволяет проверить, является ли число r∈Z квадратом по модулю p; расширенный алгоритм Евклида позволяет для числа h∈Z, h≢0(modp) вычислить его обратный элемент по модулю p. Как вариант, для нахождения обратного элемента можно возвести h в степень p−2 по модулю p, поскольку h⋅hp−2=hp−1≡1(modp) по Малой теореме Ферма; следовательно, h−1≡hp−2(modp). Подробное описание этих алгоритмов содержится в статье Теория чисел и кодирование с открытым ключом. |