Processing math: 100%

Конструкция конечного поля из p2 элементов

Поле из p2 элементов, где p — нечетное простое число, является квадратичным расширением поля Zp. Как известно, оно является факторкольцом кольца многочленов Zp[x] от одной переменной над полем Zp по главному идеалу, порожденному любым неприводимым многочленом степени 2. Естественно в качестве такого многочлена выбрать многочлен f(x)=x2r, где r — любой элемент кольца Zp, не являющийся квадратом.

Хорошо известно, что группа ненулевых элементов любого конечного поля является циклической. Следовательно, все ненулевые элементы поля Zp являются степенями одного элемента aZp, который порождает циклическую группу порядка p1: bZp, b0b=ak для некоторого kZ, k0. При этом, как легко видеть, элемент b является квадратом тогда и только тогда, когда k четное. Отсюда, а также из Малой теоремы Ферма, легко выводится следующее утверждение.

Предложение. Элемент rZp является квадратом в поле Zp (т.е. r=x2 для некоторого xZp) тогда и только тогда, когда r(p1)/21(modp).

Это предложение вместе с алгоритмом быстрого возведения в степень дает нам алгоритм проверки, является ли элемент r квадратом в поле Zp. Поскольку среди ненулевых элементов квадратов столько же, сколько и не квадратов (элементы ak для четных и нечетных k, где a — порождающий элемент циклической группы ненулевых элементов поля Zp по умножению), то не квадратов очень много, и, перебирая по порядку числа 0<r<p, мы быстро найдем элемент rZp, не являющийся квадратом. Это значит, что многочлен f(x)=x2r не имеет корней в Zp, т.е. является неприводимым. Следовательно, факторкольцо Zp[x]/Ideal(f(x)) является полем. Это факторкольцо содержит p2 элементов. Каждый элемент факторкольца представляется многочленом степени 1 вида g(x)=ax+b,a,bZp. Операции сложения и вычитания определяются естественным образом. Умножаются подобные многочлены с помощью следующего сравнения по модулю идеала, порожденного f(x): x2r(modf(x)). Отсюда получаем: (ax+b)(cx+d)=acx2+(ad+bc)x+bdacr+(ad+bc)x+bd=(ad+bc)x+(acr+bd)(modf(x)).

Для определения операции деления вычислим обратный элемент к элементу g(x)=ax+b, где a0. Имеем: (ax+b)(axb)=a2x2b2a2rb2(modf(x)). Из того, что r не является квадратом в Zp, вытекает, что h=a2rb20(modp) (иначе получилось бы r(b/a)2(modp)). Значит, элемент h обратим в Zp. Тогда, как легко видеть, элемент h1(axb) будет обратным элементом к элементу g(x)=ax+b.

Пример

Постороим поле GF(72), содержащее 49 элементов. Это поле является квадратичным расширением поля Z7. Найдем элемент, не являющийся квадратом по модулю 7. Элемент r=3 подходит, т.к. 3(71)/2=33=271(mod7). Следовательно, многочлен f(x)=x23 неприводим на полем Z7. Поэтому факторкольцо Z7[x]/Ideal(f(x)) является полем, содержащим 72=49 элементов. Его элементы представляются линейными многочленами вида ax+b,a,bZ7. Умножение определяется с помощью сравнения x23(modf(x)).

Для примера перемножим два элемента факторкольца: 5x+3 и 2x+1. Имеем (5x+3)(2x+1)=10x2+(5+6)x+33x2+4x+333+4x+34x+5(modf(x)).

Теперь найдем обратный элемент к элементу 5x+3. Обозначим h(5x+3)(5x3)25x294x22432103(modf(x)). Вычислим обратный к h элемент в поле Z7. Имеем h1=315(mod7). Следовательно, (5x+3)1h1(5x3)5(5x3)25x154x+6(modf(x)).

Проверим, не ошиблись ли мы и действительно ли элемент 4x+6 является обратным к элементу 5x+3. Имеем: (5x+3)(4x+6)20x2+(30+12)x+186x2+463+4221(modf(x)). Всe верно.

Реализация арифметики в поле Zp

Программная реализация поля GF(p2) подразумевает, что мы умеем работать с элементами поля Zp, т.е. с целыми числами, рассматриваемыми по модулю простого числа p. При этом в практических приложениях (например, в криптографии) простое число p может быть очень большим (например, 200-значным десятичным), и тупые алгоритмы перебора, к примеру, при нахождении обратного элемента, для таких больших чисел не работают. В теории чисел есть два замечательных алгоритма, которые надо использовать: 1) алгоритм быстрого возведения в степень и 2) расширенный алгоритм Евклида. Оба эти алгоритма являются настоящими жемчужинами среди множества алгоритмов, известных человечеству. В нашем случае алгоритм быстрого возведения в степень по модулю p позволяет проверить, является ли число rZ квадратом по модулю p; расширенный алгоритм Евклида позволяет для числа hZ, h0(modp) вычислить его обратный элемент по модулю p. Как вариант, для нахождения обратного элемента можно возвести h в степень p2 по модулю p, поскольку hhp2=hp11(modp) по Малой теореме Ферма; следовательно, h1hp2(modp).

Подробное описание этих алгоритмов содержится в статье Теория чисел и кодирование с открытым ключом.